flash中ExternalInterface不會(huì)造成方法覆蓋
在JavaScript與Flash的通信一文中我介紹了利用ExternalInterface來(lái)實(shí)現(xiàn)的JS與AS雙向通信,有朋友跟我提出疑問(wèn)如果AS或者JS中都定義了同名函數(shù),那么會(huì)造成方法覆蓋嗎?這的確是個(gè)需要考慮的問(wèn)題,通過(guò)測(cè)試證明,即使出現(xiàn)了同名方法的定義,它們也是相互獨(dú)立的,不會(huì)造成方法覆蓋。
一、AS調(diào)用JS方法時(shí)出現(xiàn)同名方法(查看實(shí)例)
AS代碼如下:
import flash.external.*;
var v =ExternalInterface.available;
t_btn.onRelease = function (){
//調(diào)用JS函數(shù)
var s = ExternalInterface.call("say","JS函數(shù)調(diào)用成功!")
//調(diào)用AS本地函數(shù)
s +=say("\n本地函數(shù)調(diào)用成功!");
r_txt.text = s;
}
//AS本地函數(shù)
function say(s){
return s;
}
HTML代碼:
//定義一個(gè)JS函數(shù)
function say(txt){
return txt;
}
可以看到在JS中定義了一個(gè)say方法供AS調(diào)用,現(xiàn)在我們?cè)贏S中定義了一個(gè)同名的say方法來(lái)驗(yàn)證它們是否會(huì)出現(xiàn)覆蓋。結(jié)果證明它們不會(huì)覆蓋,都工作得很好。(PS:不錯(cuò)~)
二、JS調(diào)用AS方法時(shí)出現(xiàn)同名方法(查看實(shí)例)
AS代碼如下://導(dǎo)入包
import flash.external.*;
//提供JS訪問(wèn)的函數(shù)名
var _method:String = "say";
//指定本地函數(shù)中this變量的作用域,可設(shè)置為null留空
var e_area:Object =null;
//AS內(nèi)部函數(shù)名
var method:Function = say;
//將函數(shù)注冊(cè)到容器列表
var wasSuccessful:Boolean = ExternalInterface.addCallback(_method, e_area, method);
//查看注冊(cè)是否成功
if(wasSuccessful){
result_txt.text = "函數(shù)注冊(cè)成功";
}
//本地的函數(shù)
function say(txt:String) {
result_txt.text = txt;
}
HTML代碼如下:
<div>
<form>
<input type="button" onclick="callExternalInterface()" value="JS調(diào)用AS方法" />
</form>
<script>
function callExternalInterface() {
thisMovie("demo").say("Hello,World");
}
//瀏覽器兼容訪問(wèn)DOM
function thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1)
{
return window[movieName]
}else{
return document[movieName]
}
}
//定義一個(gè)JS本地函數(shù)
function say(s){
alert(s);
}
</script>
</div>
可以看到在AS中定義了一個(gè)say方法供JS調(diào)用,現(xiàn)在我們?cè)贘S中定義了一個(gè)同名的say方法來(lái)驗(yàn)證它們是否會(huì)出現(xiàn)覆蓋。結(jié)果證明它們不會(huì)覆蓋,都工作得很好。(PS:也不錯(cuò)~)
通過(guò)上面的兩個(gè)例子我們可以得出結(jié)論在使用ExternalInterface時(shí)即使定義了同名方法,也不會(huì)造成方法覆蓋,你大可放心使用
posted on 2012-04-19 22:52 強(qiáng)強(qiáng) 閱讀(442) 評(píng)論(0) 編輯 收藏 所屬分類: web技巧 、Flash