[ AIR 2.0 ] Htmlloader 를 사용한 AIRAliases.js 및 html 과 자바스크립트 통신시 유의점

2010. 10. 8. 20:56AIR


먼저 air 1.0 이 나오면서 눈에 띄게 보이는 htmlLoader 는 누구나 잘 아실것 입니다

아직까지 이걸 활용해서 상용화하거나 그런곳은 눈에 띄게 없지만 우리들에겐 너무 멋진녀석이죠 ~

먼저 air 자체는 사파리, 구글크롬등에서 채택한 Webkit엔진이 런타임내에 탑재되어 있습니다 .

그러나 html퍼블리싱 작업시에는 대체적으로 firefox 로 테스트해봐야  좀더 잘 맞는거 같습니다... 어디까지가 개인적인 ..

이제 여기서 문제는 air와 htmlloader 사이에서는 통신 방법인데 결국 javaScript 밖에 없습니다

통신방법에는 여러가지가 있습니다

자세한건 레퍼런스를 참조 바랍니다

http://help.adobe.com/ko_KR/Flash/CS5/AS3LR/flash/html/HTMLLoader.html?allClasses=1


그러나 이상한건 air 1.5 에서 문제가없었던 AIRAliases.js 또는 "window.runtime.trace" 이런식으로 사용하여

여러 플래시 api 를 사용할수 있었는데 이상하게 air 2.0 업데이트되면서 에러를 발동 시키더군요

어떻게 보면 여기서도 크로스 스크립팅문제가 있는거 같습니다 .. 해결방법은

http://help.adobe.com/ko_KR/as3/dev/WS5b3ccc516d4fbf351e63e3d118666ade46-7f08.html

있습니다 . 결국 iframe 으로 하라는건데 .. 이 방법은 조금 그런거 같습니다..

제가 해결한 방법은 간단합니다 플래시에서 html에 있는 자바 함수를 캐치해서 매개변수를 받아서 처리하는방법입니다

간단히 설명드리면 발생한 에러는


이거와 같이 ReferenceError : Can't find variable : air 라는 것입니다

또한 여기서 window.runtime 를 호출해도 같은 현상입니다

결국 air를 html가 감지를 못하는 그런 요상시런 현상인거 같기도 합니다 ;; 여튼 .. 이건 패스하고


AIRAliases.js  를 불러오게 되면 보시는바와 같이 flash api 를 자유자재로 사용할수있습니다

이걸 그럼 한번


이렇게 변경해보겠습니다 간단합니다 clickme라는걸 클릭하면 gotoURL 이라는 함수를 통해 문자열을 날리는것입니다

스크립트에는 보시는바와 같이 기본적인 함수 선언이 되어있습니다


플래시에서는 html 페이지가 로드가 완료되면 complete 이벤트를 받게 되면

html 를 통해 window 로 접근해 html 페이지를 참조 할수있습니다

그럼 플래시에서 gotoURL 이라는 함수를 듣는다는 뜻입니다 ..

실행해보시면 플래시에서 gotoURL 이라는 함수를 통해 $url 매개변수을 알수있게 됩니다

끝!



  • 프로필사진
    stella2011.06.22 22:46

    안녕하세요..
    플래쉬로 에어 위젯을 만들고 있는데 플래쉬에서 htmlloader로 웹상의 html을 불러 왔고..
    그 html에서 이미지 클릭시 새로운 브라우저로 띄우길 원해서 위 방법대로 아무리 해도 잘 되지 않습니다..
    방법을 조금 더 자세히 좀 알려주세요..

    • 프로필사진
      Favicon of https://hazbola.tistory.com BlogIcon Hazbola hazbola2011.06.23 11:10 신고

      일단 먼저 불러오신 html 페이지에서 이미지 클릭시 호출되는 자바스크립트가 제대로 호출되시는지 먼저확인을 부탁드릴께요. 간단한 Alert("##";) 을 한번 테스트 부탁드릴께요
      이상이 없으시다면 방법은 2가지 입니다

      1. 자바스크립트 캐치
      - htmlLoader을 통해서 불러온 html 페이지에서 호출 되는 모든 javaScript 를 loader가 캐치 할수있습니다. 새로운 NativeWindow 를 통해서 열리게 되어있습니다. 단 새로운 원도우를 띄워주는 자바스크립트 문법이 있어야겠죠.

      2. 자체 메소드 제작

      제가 포스팅한 글 대로입니다 임의의 호출 메소드를 만들어서 거기에 같이 들어온 매개변수를 받아서 재 가공하는것입니다