今天简单的测试了下Flash 和 Js 的相互调用,IE下测试通过
基本上也是从网上不断地搜集资料,主要是学习了方法。
主要就是使用Flash提供的一个类ExternalInterface
其中调用的ExternalInterface.call 和 ExternalInterface.addCallback 方法
。
。。。。
Flash调用js方法
很简单,ExternalInterface.call("Alert", "来自Flash的.");
其中的 "Alert" 也可以是方法ExternalInterface.call("MsgBox", "来自Flash的.");
HTML中的js代码如下-------
<script type="text/javascript">
function MsgBox(msg) {
Alert(msg);
}
</script>
还有, 也可以使用 getURL("javascript:MsgBox('"来自Flash的."')");
不过这个方法我测试在IE下没问题,但是在FireFox和Opera下不行,但是跳转URL正常.
js调用Flash的方法
也很简单,在Flash中使用 addCallback 做注册--
将 ActionScript 方法注册为可从容器调用。成功调用 addCallBack() 后,容器中的 JavaScript 或 ActiveX 代码可以调用在 Flash Player 中注册的函数.
addCallback(methodName:String, instance:Object, method:Function) : Boolean
参数
methodName:String - 从 JavaScript 调用 ActionScript 函数时可使用的名称。此名称不必与 ActionScript 方法的实际名称匹配。
instance:Object - this 在该方法中被解析成的对象。此对象不一定是在其上可找到该方法的对象,您可以指定任何对象(或 null)。
method:Function - 要从 JavaScript 调用的 ActionScript 方法。
返回
true - 如果调用成功,则返回 Boolean。如果调用由于下列原因而失败,则返回 false:实例不可用、遇到了安全限制、没有这种函数对象、发生了递归或类似情况。
返回值为 false 还可能表示包含环境属于调用代码无权访问的安全沙箱。您可以在包含环境的 HTML 中为 allowScriptAccess OBJECT 标签或 EMBED 标签设置一个合适的值,以解决此问题。
.>
示例 在Flash中代码如下
ExternalInterface.addCallback("Urltozzy",this,urlto_zzy);
function urlto_zzy(){
getURL("http://blog.zzy-home.com","_blank");
}
在Html中加入js代码, 其中 "SWFI" 是Html中添加的Flash 的 id
<script type="text/javascript">
function callExternalInterface() {
SWFID.Urltozzy();
}
</script>
然后在页面添加一个按钮来执行该事件
<input type="button" value="调用Urltozzy" onclick="callExternalInterface()" />.
打开页面点击按钮,即调用Flash中的方法,跳转到了新的页面.