Ie9에서 지도 출력에 이상이 있습니다

한 페이지에 여러개의 지도를 출력하여 사용 중입니다.

그런데 ie9에선 두가지 문제가 발생하네요.

  1. 1개의 지도만 출력되고,
  2. api의 주소 → 좌표 기능을 이용한 부분이 먹히지 않아 예시 사례 때 나오는 디폴트 장소가 화면에 뿌려지고 있습니다.

스레드를 검색해보니 맵지도 ie 몇버전까지 지원 되나요? 에서 ie9까지 지원되는 것으로 답변이 있더군요.

한페이지에 여러번 지도를 호출해야 해서 다음과 같이 함수를 객체화하여 같은 것을 출력해야 하는 곳마다 map2, map3으로 정의해서 돌려썼습니다. 해결 방법에 대한 가이드가 있는지 알고 싶습니다.

function callMap1(){
var mapContainer = document.getElementById(‘map’), // 지도를 표시할 div
mapOption = {
center: new daum.maps.LatLng(33.450701, 126.570667), // 지도의 중심좌표
level: 2 // 지도의 확대 레벨
};

                // 지도를 생성합니다
                var map = new daum.maps.Map(mapContainer, mapOption);
                // 지도 타입을 설정하고 컨트롤러를 생성하여 위치를 잡습니다.
                var mapTypeControl = new daum.maps.MapTypeControl();
                map.addControl(mapTypeControl, daum.maps.ControlPosition.BOTTOMLEFT);
                // 지도 줌 컨트롤러를 생성하여 위치를 잡습니다.
                var zoomControl = new daum.maps.ZoomControl();
                map.addControl(zoomControl, daum.maps.ControlPosition.LEFT);
                // 주소-좌표 변환 객체를 생성합니다
                var geocoder = new daum.maps.services.Geocoder();

                // 주소로 좌표를 검색합니다
                geocoder.addressSearch('', function(result, status) {

                    // 정상적으로 검색이 완료됐으면
                    if (status === daum.maps.services.Status.OK) {

                        var coords = new daum.maps.LatLng(result[0].y, result[0].x);

                        // 결과값으로 받은 위치를 마커로 표시합니다
                        var marker = new daum.maps.Marker({
                            map: map,
                            position: coords
                        });


                        // 지도의 중심을 결과값으로 받은 위치로 이동시킵니다
                        map.setCenter(coords);
                    }

                    // 커스텀 오버레이에 표시할 컨텐츠 입니다
                    // 커스텀 오버레이는 아래와 같이 사용자가 자유롭게 컨텐츠를 구성하고 이벤트를 제어할 수 있기 때문에
                    // 별도의 이벤트 메소드를 제공하지 않습니다
                    var content = '<div class="map_info_window">' +
                                '    <div class="info">'+
                                '       '+
                                '    </div>' +
                                '</div>';

                    // 마커 위에 커스텀오버레이를 표시합니다
                    // 마커를 중심으로 커스텀 오버레이를 표시하기위해 CSS를 이용해 위치를 설정했습니다
                    var overlay = new daum.maps.CustomOverlay({
                        content: content,
                        map: map,
                        position: marker.getPosition()
                    });

                    // 마커를 클릭했을 때 커스텀 오버레이를 표시합니다
                    daum.maps.event.addListener(marker, 'click', function() {
                        overlay.setMap(map);
                    });

                    // 커스텀 오버레이를 닫기 위해 호출되는 함수입니다
                    function closeOverlay() {
                        overlay.setMap(null);
                    }
                });
            };

저는 문제 없이 출력되는데요.
지도 3개를 한 페이지에 출력했습니다.

제가 테스트 한 코드는
multimap.html.zip (1.6 KB)

아마도 기본 위치가 되는 이유는 주소에 대한 검색 결과가 없었을 때 인듯 합니다.

애뮬을 ie9로 맞추고 돌렸을 때 보이는 에러 로그입니다. 지시하는 코드는

daum.maps.Coords?b.toLatLng():b}};var Ajax=!IE_VERSION||9<IE_VERSION?function(b){var a=new XMLHttpRequest;a.open(“GET”,b.url+"?"+Util.serialize(b.params),!0);a.setRequestHeader(“KA”,KA_HEADER_STRING);a.setRequestHeader(“Authorization”,AUTH_HEADER_STRING);a.onreadystatechange=function(){if(4===a.readyState)if(200===a.status)b.oncomplete(JSON.parse(a.responseText));else b.onerror()};a.send()}:function(b){var a=new XDomainRequest,c=AUTH_PARAM_STRING+"&"+Util.serialize(b.params);a.onload=function(){b.oncomplete(JSON.parse(a.responseText))};

이 부분인데, ie의 버전이 9일때 취하라는 행동이 먹히지 않아서 나타나는 증상이 아닌가 합니다. 검색 결과가 없었을 때…라는 것도 액션이 취해지지 않아서 디폴트로 내뱉는 걸 테구요.

이 상황에선 의문이 늘어나는데, api의 어느 한부분이라도 에러가 난다면 화면이 다 출력되지 않아야 정상일텐데 하나는 꼭 나온다는 점… 아리송하네요.

현재 에뮬레이션 세팅이 된 상태에서
UA가 어떻게 되나요?

Windows 버전과 IE 버전을 알려주세요. 확인해 보겠습니다.

아래 썼던글은 정확하게 확인이 안 된 상태의 예측글이라 삭제했습니다.

정보는 이러한데…

윈도우 10, ie 11.192

문제는 해당 에러를 찾아낸 게 제 환경이 아니라 해당 지도서비스를 이용 중인 업체 측 환경입니다. ie9에서 문제가 있다는 건 디버깅을 위해 애뮬을 통해서 접근한 것인데…

삭제 코멘트에 적으셨듯이, 애뮬레이션에서 반응을 보이지 않는 문제…라면 오류의 원인과 접근법이 서로 맞지 않을 수 있습니다. 실제로는 구형 브라우저가 원인이 아니라 다른 게 문제일 수도 있겠죠. 위에서 첨부해준 파일의 코드로 교체해도 증상은 마찬가지라서 단지 애뮬 호환의 문제인지, 정말 구형버전에서 동작 이상인지 모르겠네요.

우선 service.js는 묶어서 api의 부가 기능들은 제거하고, 좌표값을 고정으로 박아버리는 방법으로 우회 중입니다. 이렇게 해서 해결이 된다고 하면, 애뮬과 호환보다는 구형버전에서의 이상이라고 볼 수 있겠네요.

DOCTYPE 선언,
meta 태그 문서모드 지정,
사용자의 IE 옵션 보안수준,
IE의 plug in 등을 한번 확인 부탁드립니다.

계속 해 보겠지만, 전혀 해당 현상이 재현이 안되고 있어요 ㅎㅎ;

네. 요청하신 정보는 확인해보겠습니다. 우선 증상은 위에 적은대로 우회해서 해결했습니다.

1개의 좋아요