Flash与JavaScript交互:ExternalInterface调用详解

作者:半夏时间:2026-10-24 01:38:31浏览:433

本文详解Flash与JavaScript之间的双向通信机制。通过ActionScript的ExternalInterface类,实现JS调用AS函数及AS调用JS函数的具体代码示例。重点解析HTML中Flash嵌入的allowScriptAccess参数配置,以及获取Flash对象引用的thisMovie兼容写法,确保跨浏览器环境下的稳定调用。

避免使用 getURL 和 fsCommand 方法

Flash与JavaScript交互:ExternalInterface调用详解

Flash使用的ActionScript语言与JavaScript在语法和逻辑上具有高度相似性。下面将具体说明两者之间如何互相调用函数。


1:javascript 调用 flash 中的函数

ActionScript注册与调用JS函数

首先,在Flash的ActionScript脚本中引入必要的类库。


import flash.external.ExternalInterface;


假设需要调用的目标函数名为hello,其ActionScript代码如下所示:


function hello(){


return "hello";


}

ExternalInterface.addCallback("hello", this, hello);


//第一个参数为导出给JS调用的函数名,第三个参数为AS内部的实际函数名。完成此注册后,即可在JavaScript中调用AS的hello函数。


2:flash 调用 js 的函数

ExternalInterface.call("hello2", "jacky");


//第一个参数指定JavaScript中待调用的函数名,后续参数为传递给JS函数的实际参数。


3:如何互相调用

HTML嵌入配置与JS获取Flash对象

对应的HTML嵌入代码如下:


<object type="application/x-shockwave-flash" data="test.swf" width="525" height="390" name="test">


<param name="allowScriptAccess" value="sameDomain" />


<param name="movie" value="test.swf" />


<param name="quality" value="high" />


<param name="scale" value="noScale" />


<param name="wmode" value="transparent" />


</object>


JavaScript端的调用代码如下:


function callFromFlash() {


var a=thisMovie("test").hello();


alert(a);


}

function thisMovie(movieName) {


if (navigator.appName.indexOf("Microsoft") != -1) {


return window[movieName]


}

} else {


return document[movieName]


}
}

//注意,不能使用document.getElementById等常规DOM方法获取网页中的Flash对象,必须使用thisMovie函数中的逻辑进行兼容处理。


国外看到的另一种方法:

使用watch方法监听变量变化

You can't call a function, but you can change/set a variable and use the watch() method to execute the code whenever the value is changed.


ActionScript Code:


function changeType(prop, oldval, newval) {


//do your stuff


return newval;


}

var strType = "";


this.watch("strType", changeType);

作者最新文章