HTML 문서내에 SWF와 JavaScript는 ExternalInterface의 call과 addCallback 메소드를 이용하면 통신할 수 있다. ExternalInterface.addCallback( "myMethod", myMethod);로 정의하면 JavaScript에서 SWF의 myMethod를 호출할 수 있게 된다. myMethod가 function myMethod( params:Object ); 형태로 만들었다면 JavaScript에서 만든 {a:1, b:2}와 같은 값이 전달될 수 있다. 당연한거다.
AIR 1.5.3 환경에서 HTMLLoader 클래스를 이용해 위처럼 정의된 HTML 문서를 로드한다고 하자. 이 때는 Object값을 JavaScript에서 SWF내에 정의된 myMethod로 넘길 수 없다. String이나 Number 형태의 값이라면 상관없지만 Object는 안된다. 버그다. 결국 Object의 형태를 띈 String을 넘겨주고 그 String을 다시 SWF내에서 Object로 변환해주어야 한다. 이것을 구현하기 위해 json.js을 사용했지만 JSON객체를 찾을 수 없다며 에러를 던진다. 그래서 Prototype의 Object.toJSON을 이용했다. 물론 ActionScript쪽에서는 as3corelib에 있는 JSON 클래스를 활용하면 된다. String과 Object형태의 String을 어떻게 구분할지 묻는다면 try..catch 문을 활용하면 된다고 답변하고 싶다.
이 때문에 엄청 삽질하게 생겼다. ExternalInterface.call() 메소드의 두번째 인자가 ...arguments 형태라는 것을 감안하고 만들었다면 이런 고생 안했을텐데...
글쓴이: 지돌스타(http://blog.jidolstar.com)
'비공개 > Adobe AIR' 카테고리의 다른 글
Adobe AIR 애플리케이션 배포후 publisher ID 파일이 누락되는 문제. (10) | 2010.02.01 |
---|---|
[Adobe AIR] HTMLLoader에 로드되는 HTML문서에 trace 기능 추가하기 (8) | 2010.01.23 |
Adobe AIR로 만든 Flash Mini Builder - ActionScript 3.0 경량 IDE (18) | 2010.01.02 |
Adobe AIR 2.0 Overview #1 - 개발환경 구축방법 및 새로운 기능 소개 (9) | 2009.12.08 |
Mac에서 AIR 2.0 Beta 개발환경 만들기 - Flash Builder 4 Beta 2 기반 (19) | 2009.12.03 |