ExternalInterface.call() 이 Internet Explorer 에서 작동 안하는 문제

2008. 5. 15. 20:33AS3

출처: http://www.juniac.net/113



플래시 안에서 ExternalInterface.call()메쏘드 를 사용할때 InternetExplorer에서만 제대로 작동하지 않는문제가 발생했다.

코드는 간단하게



ExternalInterface.call("document.location.href.toString")




인데 FF에서는 제대로 받아오는 반면에 IE에서는 값을 제대로 받지 못하는 문제 발생

Object태그로 SWF를 퍼가서 붙여 놓은 곳에서는 작동하지 않아 찾아봤다.

원인은 obejct의 id를 부여하지 않아 생긴 문제.



=========================================================================================

External API 요구 사항 및 장점

External API는 ActionScript의 일부로서, Flash Player의 컨테이너 역할을 하는 "외부 응용 프로그램"(일반적으로 웹 브라우저 또는 독립 실행형 프로젝터 응용 프로그램)에서 실행되는 코드와 ActionScript 간의 통신 메커니즘을 제공합니다. ActionScript 3.0에서는 ExternalInterface 클래스에서 External API의 기능을 제공합니다. Flash Player 8의 이전 버전에서는 fscommand() 액션을 사용하여 컨테이너 응용 프로그램과 통신합니다. Flash Player 8 버전부터는 ExternalInterface 클래스가 fscommand()를 대체하므로, JavaScript와 ActionScript 간의 모든 통신에 이 클래스를 사용하는 것이 좋습니다.

중요


예를 들어 이전 응용 프로그램과 호환성을 유지해야 하거나 타사 SWF 컨테이너 응용 프로그램 또는 독립 실행형 Flash Player와의 호환을 위해 이전 fscommand() 함수를 사용해야 하는 경우, flash.system 패키지에서 패키지 레벨 함수로 사용할 수 있습니다.

ExternalInterface 클래스는 ActionScript 및 Flash Player가 HTML 페이지의 JavaScript 또는 Flash Player 인스턴스를 포함하는 데스크톱 응용 프로그램과 쉽게 통신할 수 있도록 하는 하위 시스템입니다.

ExternalInterface 클래스는 다음 경우에만 사용할 수 있습니다.

  • 지원되는 모든 버전의 Internet Explorer for Windows(5.0 이상)
  • Flash Player ActiveX 컨트롤의 인스턴스를 사용하는 데스크톱 응용 프로그램 등 컨테이너 응용 프로그램
  • NPRuntime 인터페이스를 지원하는 브라우저(현재 다음과 같은 브라우저가 있습니다.)
    • Firefox 1.0 이상
    • Mozilla 1.7.5 이상
    • Netscape 8.0 이상
    • Safari 1.3 이상

그 밖의 모든 경우(예: 독립 실행형 플레이어에서 실행) ExternalInterface.available 속성은 false를 반환합니다.

ActionScript에서는 HTML 페이지에서 JavaScript 함수를 호출할 수 있습니다. External API는 fscommand()와 비교할 때 다음과 같은 향상된 기능을 제공합니다.

  • fscommand() 함수와 함께 사용되는 함수는 물론 모든 JavaScript 함수를 사용할 수 있습니다.
  • 이름과 개수에 상관없이 인수를 전달할 수 있습니다. 명령과 단일 문자열 인수를 전달하는 데 제한이 없습니다. 따라서 External API는 fscommand()보다 유연성이 뛰어납니다.
  • Boolean, Number 및 String 등 다양한 유형의 데이터를 전달할 수 있습니다. 더 이상 String 매개 변수에 국한되지 않습니다.
  • 호출 값을 수신할 수 있으며 그 값은 즉시 사용자 호출의 반환 값으로 ActionScript에 반환됩니다.

경고


HTML 페이지의 Flash Player 인스턴스에 제공된 이름(object 태그의 id 속성)에 JavaScript에서 연산자로 정의된 하이픈(-)이나 다른 문자가 포함되어 있으면
(예: +, *, /, \, . 등) Internet Explorer에서 컨테이너 웹 페이지를 보면서 ActionScript에서 ExternalInterface를 호출할 수 없습니다.

뿐만 아니라 Flash Player 인스턴스를 정의하는 HTML 태그(objectembed 태그)가 HTML form 태그에 중첩되어 있는 경우에도 ActionScript에서 ExternalInterface가 호출되지 않습니다.



===============================================================================