Flash与JS通讯是前端开发中经常遇到的问题,下面我来为大家详细讲解一下Flash与JS通讯方法的完整攻略。
Flash与JS通讯方法
Flash与JS之间的通讯一般通过两种方式,一种是Flash调用JS方法,另一种是JS调用Flash方法。下面分别详细讲解这两种方式。
Flash调用JS方法
Flash调用JS方法是通过ExternalInterface实现的,其中调用的语法如下:
ExternalInterface.call("javascript_function_name", args...)
其中,javascript_function_name
是要调用的JS方法名,args...
是传递给JS方法的参数。
下面是一个Flash调用JS方法的示例代码:
import flash.external.ExternalInterface;
ExternalInterface.call("jsMethod", "Hello World!");
这个示例代码会调用名为jsMethod
的JS方法,处理字符串参数Hello World!
。
JS调用Flash方法
JS调用Flash方法主要是通过document.getElementById("flashId")
获取Flash对象,在获取到Flash对象后,调用其提供的方法。下面是具体的示例代码:
// 获取Flash对象
var flashObj = document.getElementById("flashId");
// 调用Flash方法
flashObj.flashMethod("Hello World!");
上面这段代码中,flashObj
变量获取到的就是id
为flashId
的Flash对象,之后就可以调用其中的flashMethod
方法,并传递字符串参数Hello World!
。
Flash与JS通讯注意事项
以上两种方法虽然简单,但在实际应用中还有一些需要注意的事项:
- ExternalInterface.call()方法仅适用于IE、Firefox、Chrome和Safari浏览器,不适用于Opera;
- 对于调用JS方法或JS调用Flash方法,两者必须在同一域名下,在不同域名下通讯会出现安全问题;
- 在Flash中使用ExternalInterface调用JS方法时,必须在HTML页面中嵌入Flash时,在
<object>
或<embed>
标签中添加<param name="allowScriptAccess" value="always" />
,否则会抛出异常。
示例说明
下面提供两个使用Flash与JS通讯的示例。
示例一
HTML代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Flash与JS通讯示例一</title>
<script>
function flashCallback(msg) {
alert(msg);
}
</script>
</head>
<body>
<object id="flashId" width="0" height="0" type="application/x-shockwave-flash">
<param name="movie" value="flash.swf" />
<param name="allowScriptAccess" value="always" />
</object>
<button onclick="document.getElementById('flashId').flashMethod('Hello World!')">Click Me</button>
</body>
</html>
Flash代码:
// ExternalInterface回调函数
ExternalInterface.addCallback("flashMethodCallback", null, flashMethodCallback);
// flashMethod方法
function flashMethod(msg:String):void {
ExternalInterface.call("flashCallback", "Flash调用JS方法:" + msg);
}
// JS回调函数
function flashMethodCallback(msg:String):void {
trace("JS调用Flash方法:" + msg);
}
在该示例中,Flash调用JS的回调函数为flashCallback
,而JS调用Flash的回调函数为flashMethodCallback
,通过这两个回调函数实现登录验证。
示例二
HTML代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Flash与JS通讯示例二</title>
<script>
function flashCallback(msg) {
alert(msg);
}
</script>
</head>
<body>
<object id="flashId" width="100%" height="100%" type="application/x-shockwave-flash">
<param name="movie" value="flash.swf?rand=Math.random()" />
<param name="allowScriptAccess" value="always" />
</object>
<button onclick="document.getElementById('flashId').flashMethod('Hello World!')">Click Me</button>
</body>
</html>
Flash代码:
// ExternalInterface回调函数
ExternalInterface.addCallback("flashMethodCallback", null, flashMethodCallback);
// flashMethod方法
function flashMethod(msg:String):void {
ExternalInterface.call("flashCallback", "Flash调用JS方法:" + msg);
}
// JS回调函数
function flashMethodCallback(msg:String):void {
trace("JS调用Flash方法:" + msg);
}
在该示例中,JS调用Flash的回调函数同样为flashMethodCallback
,Flash通过Math.random()
获取到不同的随机数,避免Flash缓存问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:flash与js通讯方法 - Python技术站