js 怎么向flash 3.0 传参数

JavaScript021

js 怎么向flash 3.0 传参数,第1张

as3与页面实时通讯我想各位童鞋也都很常用,方法也有几种,下面也给大家整理下。

一直没去深入研究下AS3与JS的交互开发也就是SWF在html中的通信,最近出于项目要求被迫投入了,也在这里做个汇总

一:HTML中最快速的传值方式

在HTML中插SWF时,可以跟个参数,比如:

files/home.swf?id=”21″

在AS3里可以这样去接收

var

id:String=stage.loaderInfo.parameters["id"]

这种传值方式其实AS2的时候也是这样做的,到AS3时使用parameters 属性替换了AS1.0 和2.0

提供SWF文件参数作为主时间轴的技术,所以我们改用一下AS3的取值方式就行了.

这种方式只能是单边一次性传值,有时候会用得到,但需要与JS相互通信就不行了,还有,只能接收字符串.

二:使用外部通信接口ExternalInterface

这也是AS2时代进化来的,目前公认的最靠谱的通信方式.

使用方法:

1.JS调用AS3的函数

确定JS调用AS3之前,要在AS3中绑定调用函数,也就是说,只有AS3答应给的方法JS才能调用.

使用:ExternalInterface.addCallback(functionName:String,

closure:Function):void有两个参数:

functionName:String —

容器可用于调用函数的名称。

closure:Function — 要调用的 closure 函数。 这可能是一个独立的函数,或者可能是引用对象实例方法的

closure 方法。通过传递 closure 方法,回调实际上可以定向到特定对象实例的方法。

ExternalInterface.addCallback("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")

!= -1) {

return window[movieName]

} else {

return

document[movieName]

}

}

thisMovie("mov").getASVars(value)

2.AS3调用JS的函数

AS3调JS直接使用call就行了

使用:ExternalInterface.call(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 5.0 及更高版本 Windows

Netscape 8.0 及更高版本

Windows Macintosh

Mozilla 1.7.5 及更高版本 Windows Macintosh

Firefox 1.0 及更高版本

Windows Macintosh

Safari 1.3 及更高版本 Macintosh

还有个安全沙箱的问题,如果出现安全沙箱警报,可以使用以下两种修正方法:

1.在包含 HTML 页中的 SWF 文件的 object

标签中,设置以下参数:

2.在 SWF 文件中,添加以下

ActionScript:

Flash.system.Security.allowDomain(sourceDomain)

如果要与flash交互,需要在as代码中先注册执行的函数,然后js才能通过as的接口调用该方法, 所以不能直接调用flash,要实现这个方法需要改这个插件的源码,不过稍微研究下还是可以改的, as3.0与java很相似