카카오 로드뷰 로드시 에러가 뜹니다

jsonp loading error - roadview.js:1
Uncaught (in promise) undefined - roadview.js:1
Uncaught ReferenceError : csspano_1605505107241_1 is not defined - searchNodeInfo.do?TY...o 1605505107241 1:1

이란 에러와 함께 회색화면이 로드되고, 개발자도구의 네트워크에서 새로고침시 정상동작됩니다…

//지도위에 현재 로드뷰의 위치와, 각도를 표시하기 위한 map walker 아이콘 생성 클래스
function MapWalker(position){

    //커스텀 오버레이에 사용할 map walker 엘리먼트
    var content = document.createElement('div');
    var figure = document.createElement('div');
    var angleBack = document.createElement('div');

    //map walker를 구성하는 각 노드들의 class명을 지정 - style셋팅을 위해 필요
    content.className = 'MapWalker';
    figure.className = 'figure';
    angleBack.className = 'angleBack';

    content.appendChild(angleBack);
    content.appendChild(figure);

    //커스텀 오버레이 객체를 사용하여, map walker 아이콘을 생성
    var walker = new kakao.maps.CustomOverlay({
        position: position,
        content: content,
        yAnchor: 1
    });

    this.walker = walker;
    this.content = content;
}

//로드뷰의 pan(좌우 각도)값에 따라 map walker의 백그라운드 이미지를 변경 시키는 함수
//background로 사용할 sprite 이미지에 따라 계산 식은 달라 질 수 있음
MapWalker.prototype.setAngle = function(angle){

    var threshold = 22.5; //이미지가 변화되어야 되는(각도가 변해야되는) 임계 값
    for(var i=0; i<16; i++){ //각도에 따라 변화되는 앵글 이미지의 수가 16개
        if(angle > (threshold * i) && angle < (threshold * (i + 1))){
            //각도(pan)에 따라 아이콘의 class명을 변경
            var className = 'm' + i;
            this.content.className = this.content.className.split(' ')[0];
            this.content.className += (' ' + className);
            break;
        }
    }
};

//map walker의 위치를 변경시키는 함수
MapWalker.prototype.setPosition = function(position){
    this.walker.setPosition(position);
};

//map walker를 지도위에 올리는 함수
MapWalker.prototype.setMap = function(map){
    this.walker.setMap(map);
};

/*
 * 아래부터 실제 지도와 로드뷰 map walker를 생성 및 제어하는 로직
 */
 
var coord;
var coords;
var mapContainer;
var map;
var roadviewContainer;
var roadview;
var roadviewClient;
var mapWalker;

window.onload = function () {
	kakao.maps.load(kakaoLoaded);
};

function kakaoLoaded(){
		coord = "127.03631910319089, 37.254914558342975";
		coords = coord.split(",");
		
		console.log("좌표 : " + coords);
		mapContainer = document.getElementById('map'), // 지도를 표시할 div 
		//mapCenter = new kakao.maps.LatLng(coords[1], coords[0]), // 지도의 가운데 좌표
		mapCenter = new kakao.maps.LatLng(coords[1], coords[0]), // 지도의 가운데 좌표
		mapOption = {
			center: mapCenter, // 지도의 중심좌표
			level: 3 // 지도의 확대 레벨
		};
		
		// 지도를 표시할 div와  지도 옵션으로  지도를 생성합니다
		map = new kakao.maps.Map(mapContainer, mapOption);

		// 로드뷰 도로를 지도위에 올린다.
		map.addOverlayMapTypeId(kakao.maps.MapTypeId.ROADVIEW);

		roadviewContainer = document.getElementById('roadview'); // 로드뷰를 표시할 div
		roadview = new kakao.maps.Roadview(roadviewContainer); // 로드뷰 객체
		roadviewClient = new kakao.maps.RoadviewClient(); // 좌표로부터 로드뷰 파노ID를 가져올 로드뷰 helper객체

		// 지도의 중심좌표와 가까운 로드뷰의 panoId를 추출하여 로드뷰를 띄운다.
		roadviewClient.getNearestPanoId(mapCenter, 50, function(panoId) {
			roadview.setPanoId(panoId, mapCenter); // panoId와 중심좌표를 통해 로드뷰 실행
		});

		mapWalker = null;

		// 로드뷰의 초기화 되었을때 map walker를 생성한다.
		kakao.maps.event.addListener(roadview, 'init', function() {

			// map walker를 생성한다. 생성시 지도의 중심좌표를 넘긴다.
			mapWalker = new MapWalker(mapCenter);
			mapWalker.setMap(map); // map walker를 지도에 설정한다.

			// 로드뷰가 초기화 된 후, 추가 이벤트를 등록한다.
			// 로드뷰를 상,하,좌,우,줌인,줌아웃을 할 경우 발생한다.
			// 로드뷰를 조작할때 발생하는 값을 받아 map walker의 상태를 변경해 준다.
			kakao.maps.event.addListener(roadview, 'viewpoint_changed', function(){

				// 이벤트가 발생할 때마다 로드뷰의 viewpoint값을 읽어, map walker에 반영
				var viewpoint = roadview.getViewpoint();
				mapWalker.setAngle(viewpoint.pan);
				
			});

			// 로드뷰내의 화살표나 점프를 하였을 경우 발생한다.
			// position값이 바뀔 때마다 map walker의 상태를 변경해 준다.
			kakao.maps.event.addListener(roadview, 'position_changed', function(){

				// 이벤트가 발생할 때마다 로드뷰의 position값을 읽어, map walker에 반영 
				var position = roadview.getPosition();
				mapWalker.setPosition(position);
				map.setCenter(position);

			});
		});
}

좌표로그까지는 정상적으로 찍힙니다. ( console.log("좌표 : " + coords); )

20201116_16260320201116_143902

안녕허세요~
재현되는 환경 정보 부탁드립니다(os, 브라우저 종류 및 버전)
추가로 제가 접근할 수 있는 url이 있을까요?

웹에서 바로띄우진않고, c#의 winform에서 chromium webbrowser라는 창엔에 로드뷰 html을 로드하고있고, 현재 내부망에서 사용중이여서 url접근이 안될거같습니다…

roadviewClient = new kakao.maps.RoadviewClient();

roadviewClient.getNearestPanoId(mapCenter, 50, function(panoId) {
roadview.setPanoId(panoId, mapCenter); // panoId와 중심좌표를 통해 로드뷰 실행
});

해당 코드에서 에러가 발생하는것같습니다.

그리고 처음 로드뷰 로드시에 해당 에러가 찍힐때까지 일정시간이 걸리고, 이 에러가 찍힌후에

다시 새로고침하면 갑자기 정상적으로 동작합니다.

캐시랑 연관이 있는것같기도한데, 감이 잡히지않아서 문의드립니다.

안녕하세요~

한번 이렇게 수정해 보시겠어요?

roadviewClient.getNearestPanoId(mapCenter, 50, function(panoId){
     if (panoId) {
         roadview.setPanoId(panoId, mapCenter);         
     }
});

즉 panoID의 존재 유무에 따라 실행이 되도록 한번 처리해보시겠어요?
이부분은 좀 더 확인해 봐야하는데 간혹 panoID가 안나오는 경우가 있습니다. 이전의 한 이슈는 map 좌표가 잘못되서 발생했습니다.
아무튼 panoID를 함번 체크해 보시기 바라며,

혹시 가능하시다면, 오류가 발생할때의 panoID 값과, 네트워크 통신 부분을 확인 하실 수 있으실것인데, jsonp오류가 났다는 것은 jsonp 콜을 보냈으나, 응답이 잘못내려온 것이거든요. 그래서 그 서버로 콜을 하는(올려주신 스샷의 네트워크탭에 찍힐거에요)
부분의 전체 URL을 한번 올려주시면 처리에 도움이 될것 같습니다.

한번 확인 부탁드립니다.

다시 확인해봤는데 panoID가 잘 들어옵니다.(오타로인해;)

내부코드에서 어떤걸 호출하는지 모르겠지만 호출시

pending상태로 있다가 15초정도후에 timeout이 걸리는것같습니다.

timeout이후에 새로고침하면 그때부터 정상적으로 동작됩니다…

호출 url은 메세지로 보내드렸습니다.

저 역시 내부망을 사용하는데 거의 동일하게 증상이 나오는 것 같네요 혹시 해결은 됐는지 궁금합니다.

클라이언트에서 어떤 로드뷰 정보가담긴 json을 요청하는데
내부망 네트워크가 느려서 카카오 서버측에서 timeout을 응답하는것같습니다.
정확한 원인파악이 되지않네요…
일단 캐시를 사용할수있는지 보고있습니다.

음… 어려운 이슈네요…
현 상황의 경우엔, 저희쪽 API이슈라기 보다, 네트워크쪽 문제 같아 보이긴 합니다.
데이터 요청을 보냈는데, pending되다가 취소가 되버리면 로드뷰가 안뜨는 것은 맞습니다.

그리고 보내주면 URL을 확인해 봤는데, 해당 URL의 경우엔 일정 시간후에 cancel시키는 로직이 없는 모듈에서 보낸 URL값인데요.
보내주신 URL말고, 첫질문에서 “csspano_1605505107241_1” 적어주신 이 callbackname이 붙어서 호출 하는 경우에는 10초의 타임아웃 로직을 가지고 있습니다.

아무튼 저한테 보내주신 URL과 타임아웃이 걸린다는 부분의 URL이 서로 다른 URL이 맞지요?

일단 해당현상에 대해서 좀더 알아보긴 하겠지만, 저희가 해결할 수 있는지는 잘 모르겠습니다;;
한번 회사의 네트워크 담당자분께 문의도 해보시는게 어떠실까 합니다.