AMD를 지원하지만 global namespace에도 Kakao 가 존재하는 것은 하위호환 이슈와, UMD 방식으로 제공되고 있기 때문입니다. UMD는 global, AMD, commonjs 등 다양한 모듈 형태를 동시에 지원하기 위한 방법입니다. https://github.com/umdjs/umd
그리고 정확한 요구사항은 알수없지만 중첩된 require() 호출보다는 한번에 필요한 디펜던시들을 읽어오는 편이 나을 것 같습니다.
require(['kakao'], function (Kakao) {
require(['some-module'], function (SomeModule) {
// ...
});
});
=>
require(['kakao', 'some-module'], function (Kakao, SomeModule) {
// ...
});
화면을 열었을 때 TEST 버튼을 누르면 Uncaught Error: Mismatched anonymous define() module: function (){return dt} 오류가 납니다. 위에 다른 분이 질문하셨던 것 처럼 Kakao를 requirejs에서 호출 후에 다른 모듈을 부르면 이 오류가 나는 겁니다. 그리고 또 윗분 말씀처럼 TEST를 다시 눌러 실행하면 정상적으로 결과가 나옵니다. 결과적으로 Kakao를 호출하고 처음 호출되는 requirejs는 오류가 납니다.
두번째 링크는 카톡 공유하기 링크인데 이것도 처음 누르면 오류가 납니다. 이미 로드된 Kakao를 부름에도 불구하고 동일한 오류가 납니다. 당연히 다시 누르면 됩니다.
마지막 링크는 윗분이 해결하셨다는 방법처럼 Kakao 로딩 후 임의로 다른 모듈을 로드 후 Kakao를 부르면 정상적으로 처리되는 것을 확인해주는 테스트 링크입니다.
저희도 이 문제로 인해 페이지 전체가 엉망이되는 문제를 겪었습니다. 윗분 말씀처럼 임의로 다른 모듈을 부르도록 하여 사용중에 있으나 조속히 수정되기를 바랍니다.
그리고 한가지더. “탐색이 차단됨 오류 테스트” 링크를 누르면 새로운 오류가 발생하는 것을 테스트 할 수 있도록 작성한 페이지를 보실 수 있습니다.
이 페이지는 필히 모바일 기기에서 테스트 바랍니다. 모바일 크롬에서 이 페이지를 열고 “KAKAO link” 버튼을 누르면 “탐색이 차단됨: intent:kakaolink://send?appkey=TGIF&appver=1.0&apiver=3.0&linkver=3.5&extras=%7B%2…b.io%22%7D&objs=%5B%5D&forwardable=false#Intent;package=com.kakao.talk;end;” 라는 오류가 발생합니다. 아마도 팝업 차단처럼 event(onclick event) 스코프 내에서 커스텀 스키마 호출이 처리되지 않으면 차단하는 것으로 보입니다. 그런데 requirejs의 특성상 스코프를 벗어나게 되므로 문제 해결이 되지 않을 수 있을 것으로 보이나 확인 부탁드립니다. 저희는 그래서 일단 Kakao.init을 페이지 시작시 미리 해두고 사용하고는 있으나 이렇게되면 requirejs를 사용하는 의미가 없어집니다.
자세한 설명과 확인 감사합니다. 덕분에 SDK에서 이슈가 될만한 사항을 찾아냈고 다음 버전에서 패치할 수 있도록 하겠습니다.
탐색이 차단됨 오류 테스트의 경우 몇몇 모바일(아이폰, 안드로이드) 기기에서 테스트를 해보았는데요 현상이 재현이 안되네요.
비동기로 SDK를 로딩을 하니 click event scope과는 다른 scope 이 되어서 의심이 갈 것 같기도 한데요.
Chrome 의 패치 내용을 보면 탐색 차단됨 오류가 안 날 것 같아서요. 해당 이슈는 조금 더 살펴보도록 하겠습니다.