ExternalInterface是一个外部的用于实现Actionscript和Flash Player容器之间通信的应用程序接口(诸如AS与JS的通信)。推荐对所有 JavaScript 与 ActionScript 之间的通信使用 ExternalInterface,替代较旧的fscommand(),getURL()方法。
ExternalInterface类有两个公共属性:
- available : Boolean [static][read-only] 指示此播放器是否位于提供外部接口的容器中。
- objectID : String [static][read-only] 在 Internet Explorer 中,返回标签的 id 属性;在 Netscape 中,返回 name 属性。
同时具有两个公共方法:
- addCallback(functionName:String, closure:Function):void [static] 将 ActionScript 方法注册为可从容器调用。
- call(functionName:String, … arguments):* [static] 调用由 Flash Player 容器公开的函数,不传递参数或传递多个参数。
ActionScript调用JavaScript demo
AS:
import flash.events.MouseEvent;
import flash.external.ExternalInterface;
bt.addEventListener(MouseEvent.MOUSE_UP,alert);
function alert(e:MouseEvent):void{
ExternalInterface.call("alert","a demo for call \n http://omiga.org");
}
直接调用即可,当然,最好检查一下当前容器是否支持外部接口通信。
bt.addEventListener(MouseEvent.MOUSE_UP,alert);
function alert(e:MouseEvent):void{
if(ExternalInterface.available){
ExternalInterface.call("alert","a demo for call \n http://omiga.org");
}
}
JavaScript调用ActionScript demo
AS:
import flash.external.ExternalInterface;
function setText(s){
i_txt.text = s;
}
ExternalInterface.addCallback("setText",setText);
HTML:
<object id="mySWF" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="300" height="22">
<param name="movie" value="addCallback.swf" />
<param name="quality" value="high" />
<param name="allowScriptAccess" value="always" />
<embed src="addCallback.swf" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="300" height="22"></embed>
</object>
<button onclick="set()">设 置</button>
<script type="text/javascript">
function getFlash(id){
if(document.all) return document.getElementById(id);
else return document.getElementById(id).getElementsByTagName("embed")[0];
}
function set(){
var s = prompt('请输入:');
getFlash("mySWF").setText(s);
}
</script>
