一直没去深入研究下AS与JS的交互开发也就是SWF在html中的通信最近出于项目要求被迫投入了也在这里做个汇总
一:HTML中最快速的传值方式
在HTML中插SWF时可以跟个参数比如:
files/homeswf?id=”″
在AS里可以这样去接收
var id:String=stageloaderInfoparameters["id"]; 这种传值方式其实AS的时候也是这样做的到AS时使用parameters 属性替换了AS 和 提供SWF文件参数作为主时间轴的技术所以我们改用一下AS的取值方式就行了
这种方式只能是单边一次性传值有时候会用得到但需要与JS相互通信就不行了还有只能接收字符串
二:使用外部通信接口ExternalInterface
这也是AS时代进化来的目前公认的最靠谱的通信方式
使用方法:
JS调用AS的函数
确定JS调用AS之前要在AS中绑定调用函数也就是说只有AS答应给的方法JS才能调用
使用:ExternalInterfaceaddCallback(functionName:String closure:Function):void有两个参数:
functionName:String — 容器可用于调用函数的名称
closure:Function — 要调用的 closure 函数 这可能是一个独立的函数或者可能是引用对象实例方法
ExternalInterfaceaddCallback("getASVars"getASFun);private function getASFun(value:String):void {//得到JS传来的值:value}
好了可以在JS中去调用这个方法了调用前还要先取得插进HTML的SWF的ID我们在HTML中不管用什么方式插都可以设置ID
例如先通过id为”mov”来获取对象再调用上面绑定的方法:
代码如下:function thisMovie(movieName) { if (navigator
appName
indexOf("Microsoft") !=
) { return window[movieName]; } else { return document[movieName]; } } thisMovie("mov")
getASVars(value);
AS
调用JS的函数
AS调JS直接使用call就行了
使用:ExternalInterfacecall(functionName:String … arguments):*
这个方法有两个参数
functionName:String — 要在容器中调用的函数的名称
… arguments — 传递到容器中的函数的参数 您可以指定零个或多个参数参数之间用逗号分隔 这些参数可以是任何 ActionScript 数据类型 当调用 JavaScript 函数时ActionScript 类型自动封装到 JavaScript 类型中;当调用其它某个 ActiveX 容器时将在请求消息中对参数进行编码
例如:
代码如下:ExternalInterface
call("setToJS"
"paramTest"); //在JS中编写这个setToJS的函数 function senToJS(value){ alert(value)//输出:paramTest }
看起来很爽但也不是完全靠谱这个接口还是会挑食的只有在以下浏览器中才支持: 浏览器 操作系统 操作系统Internet Explorer 及更高版本 WindowsNetscape 及更高版本 Windows MacintoshMozilla 及更高版本 Windows MacintoshFirefox 及更高版本 Windows MacintoshSafari 及更高版本 Macintosh 还有个安全沙箱的问题如果出现安全沙箱警报可以使用以下两种修正方法:在包含 HTML 页中的 SWF 文件的 object 标签中设置以下参数 在 SWF 文件中添加以下 ActionScript
代码如下:Flash
system
Security
allowDomain(sourceDomain)