• 【设为首页】
  • 【收藏闪客居】
当前位置:主页>FLASH AS 编程>flash和WEB程序应用>文章内容
  • ExternalInterface不会造成方法覆盖
  • 来源:vsky'blog 作者:vsky 2007-06-12 【

  在JavaScript与Flash的通信一文中我介绍了利用ExternalInterface来实现的JS与AS双向通信,有朋友跟我提出疑问如果AS或者JS中都定义了同名函数,那么会造成方法覆盖吗?这的确是个需要考虑的问题,通过测试证明,即使出现了同名方法的定义,它们也是相互独立的,不会造成方法覆盖

  一、AS调用JS方法时出现同名方法查看实例

  AS代码如下:

import flash.external.*;
var v = ExternalInterface.available;
t_btn.onRelease = function (){
//调用JS函数
var s = ExternalInterface.call("say","JS函数调用成功!")
//调用AS本地函数
s += say("\n本地函数调用成功!");
r_txt.text = s;
}
//AS本地函数

function say(s){
return s;
}
  

 HTML代码:

//定义一个JS函数
function say(txt){
return txt;
}

 可以看到在JS中定义了一个say方法供AS调用,现在我们在AS中定义了一个同名的say方法来验证它们是否会出现覆盖。结果证明它们不会覆盖,都工作得很好。(PS:不错~)

二、JS调用AS方法时出现同名方法查看实例

  AS代码如下:

//导入包
import flash.external.*;
//提供JS访问的函数名
var _method:String = "say";
//指定本地函数中this变量的作用域,可设置为null留空
var e_area:Object = null;
//AS内部函数名
var method:Function = say;
//将函数注册到容器列表
var wasSuccessful:Boolean = ExternalInterface.addCallback(_method, e_area, method);
//查看注册是否成功
if(wasSuccessful){
result_txt.text = "函数注册成功";
}
//本地的函数
function say(txt:String) {
result_txt.text = txt;
}


HTML代码如下:

 

<div>
<form>
<input type="button" onclick="callExternalInterface()" value="JS调用AS方法" />
</form>
<script>
function callExternalInterface() {
thisMovie("demo").say("Hello,World");
}
//浏览器兼容访问DOM
function thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName]
}
else {
return document[movieName]
}
}
//定义一个JS本地函数
function say(s){
alert(s);
}
</script>
</div>



  可以看到在AS中定义了一个say方法供JS调用,现在我们在JS中定义了一个同名的say方法来验证它们是否会出现覆盖。结果证明它们不会覆盖,都工作得很好。(PS:也不错~)

  通过上面的两个例子我们可以得出结论在使用ExternalInterface时即使定义了同名方法,也不会造成方法覆盖,你大可放心使用。





上一篇:flash8新功能制作简易下载系统   下一篇:Object.watch的“另类”用法
  • 用户名:新注册) 密码: 匿名评论
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)


推荐内容
FLASH源文件

Copyright © 2006-2008 flashas.net All Rights Reserved.
网站内容咨询: admin#flashas.net (#为@) 联系QQ:40777822 浙ICP备06033001号
(本网站最佳浏览解析度为1024*768, 建议使用IE 6.0或以上版本浏览器。)