daumPostcode / QnA

Daum 우편번호 서비스 Q&A
http://postcode.map.daum.net/guide
93 stars 13 forks source link

일부주소 action 값 Null 반환으로 작동안하는 문제 #850

Closed hero-dataheroes closed 3 years ago

hero-dataheroes commented 3 years ago

Uncaught TypeError: Cannot read property 'action' of null at c.postMessage.c.postMessage.c.postMessage.a.customMessageHandler

가로수길 5

4.19로12길 5

등이 해당 에러로 인해 값을 가져올 수 없습니다.

hero-dataheroes commented 3 years ago

참고로 동 주소는 작동하는 것 같습니다.

daumPostcode commented 3 years ago

@hero-dataheroes 안녕하세요~

현재 테스트하고 계신 환경정보, 또는 서비스에 적용중이시라면 저희가 확인가능한 URL정보와, 해당 오류가 발생되는 플랫폼 환경(OS, 브라우저 이름, 브라우저 버전 등)을 제공해 주시기 바랍니다.

말씀하신 주소 2가지에 대해서 현재 postcode.map.daum.net/guide 공식 가이드 페이지에서 확인한 결과, 정상적으로 데이터가 내려오고 있습니다. 공식 가이드가 아닌, 제가 개발PC에서 직접 빌드해서 로그를 찍어봐도 정상적으로 내려가고 있습니다.

해당 오류메세지는 action of null 인 것으로 보아, postMessage라는 native함수를 통해 데이터를 전달할때, 이 데이터가 제대로 전달되지 않아서 발생한 문제입니다. 현재 어떻게 사용중인지 궁금합니다. 그리고 JS API는 어떤걸 사용하고 계신지도 궁금하구요.

현재로써는 일반적인 환경에서 재현이 되지 않기도 하고, CS의 추가 유입이 없는 것으로 보아 서비스의 이슈라기 보다, 로컬 즉, 테스트 하시는 환경쪽 이슈가 더 커보입니다. 아무튼 정보를 제공해 주시면 감사하겠습니다.

hero-dataheroes commented 3 years ago

사이트는 Vue Framework를 사용하고 있구요.

내부 소스는


        loadScript(){
            const naverMapScript = document.getElementById('daumpost')
            if(!naverMapScript){
                const script = document.createElement('script')
                var src = '//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js'
                script.src = src
                script.id = 'daumpost'
                document.body.appendChild(script)
            }
        },
        addr(){
            new daum.Postcode({
                oncomplete: data => {
                    this.info.address = data.jibunAddress
                    this.info.addr.address = data.jibunAddress
                    this.info.addr.roadaddress = data.roadAddress
                    this.info.addr.sido = data.sido
                    this.info.addr.sigu = data.sigungu
                    this.info.addr.hdong = data.hname
                    this.info.addr.bdong = data.bname
                    this.info.addr.ro = data.roadname
                    this.update()
                }
            }).open();
        }

이렇게 정적cdn이 아닌 컴포넌트내에서 동적으로 script를 로드하여 oncomplete함수만 구현하여 사용하고 있습니다. 사용중인 url은

http://kiwihome.co.kr/register?type=A

입니다.

postcode library내에서 일어나는 오류라서 브라우저에 관계없이 발생합니다.

로드의 문제가 있을까요?

hero-dataheroes commented 3 years ago

다른 주소 및 구주소를 로드할 때에는 문제가 없이 일부주소에만 확인되고 있어서 환경 문제라고 한다면 동적으로 라이브러리를 로드한 문제인지 확인부탁드립니다.

daumPostcode commented 3 years ago

@hero-dataheroes 안녕하세요~ 말씀하신 주소 확인해 보니, 올려주신 에러는 뜨지 않습니다. 말씀하신 동적로딩의 경우에는 별 문제는 없습니다. 이전 JS 스크립트라면 문제가 있으나, 현재 배포되고 관리되고 있는 URL의 경우엔 통합파일이라 위와 같이 로딩해도 문제가 발생하지 않아요. 아무튼 로딩 문제는 아닙니다.

알려주신 링크로 테스트 했고, 해당 링크는 도메인값이 정상이기에 postMessage를 통한 이종도메인 통신은 잘 되는 것으로 확인됩니다. 테스트 하실때 위 도메인이 아닌 다른 도메인을 사용한다면 postMessage 스펙을 MDN이나 이런데서 보시면 아시겠지만, 도메인값이 들어가지 않거나 허용되지 않는 도메인 값의 경우엔 데이터 전달이 안됩니다.

제가 테스트 한 환경은 Mac 11.4 빅서, chrome 92버전입니다.

아무튼 위 에러를 떠나서 가로수길 5 4.19로12길 5 와 같은 주소에서 주소 정보가 안들어가는 현상은 있네요.

이 부분의 경우엔 말씀하신 주소들의 경우 도로명주소와 지번주소가 1:1이 아닙니다. 하나의 도로명 주소에 다수의 지번주소가 매핑된 것으로, 이러한 주소에서는 도로명 주소를 선택할 경우엔 jibunAddress라는 항목에 데이터가 들어가지 않고, autoJibunAddress라는 항목에 들어가게 됩니다. 이와 관련된 사항은 https://postcode.map.daum.net/guide#attributes 공식 가이드 페이지의 속성 부분 설명의 oncomplete함수에 전달되는 데이터스펙 아랫부분 파란색 박스에 설명되어 있습니다. 한번 확인 부탁드립니다.

hero-dataheroes commented 3 years ago

네 확인해보겠습니다. 감사합니다.