Flash ExternalInterface.call() 이 Internet Explorer 에서 작동 안하는 문제
플래시 안에서 ExternalInterface.call()메쏘드 를 사용할때 InternetExplorer에서만 제대로 작동하지 않는 문제가 발생했다.
코드는 간단하게
ExternalInterface.call("document.location.href.toString")
인데 Firefox 에서는 제대로 받아오는 반면에 Internet Explorer 에서는 값을 제대로 받지 못하는 문제 발생
html 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 간의 모든 통신에 이 클래스를 사용하는 것이 좋습니다.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에 반환됩니다.