我知道使用ExternalInterface,我们可以注册可以从JavaScript调用的ActionScript函数,但是我想为一个具有在Application中创建多个实例的类注册actionscript函数。那么它将如何识别从java脚本调用哪个对象动作脚本函数。
例如:
1)Java脚本:具有调用Action脚本函数showAlert()的函数javaScripAlert();
即testSwf.alert(value);
function javaScripAlert(value){
TestSwf.alert();
}
2)ABC类具有回调函数showAlert(value);它在类中注册回调函数“showAlert”。
是的。 ExternalInterface的。 addCallback(“alert”,showAlert);3)TestApplication:在这里我创建了Calss ABC的多个对象
即
我在TestApplication中创建了多个ABC类型的对象。因此,当我从HTML调用javaScript函数javaScripAlert()时,它只调用对象“abc3”的函数showAlert(value)而不调用其他对象abc1,abc2。
当时也调用了其他对象的函数。
谢谢&问候, Sanjay Ruparelia
答案 0 :(得分:0)
调用ExternalInterface.addCallback("myCallback", myCallback)
的每个Actionscript对象都将覆盖javascript回调。所以最后一个要调用的ActionScript对象获胜。
示例强>:
<强> TestObject.mxml 强>
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300"
initialize="registerCallback()">
<mx:Script>
<![CDATA[
import flash.external.ExternalInterface;
protected function registerCallback():void
{
if (ExternalInterface.available)
{
ExternalInterface.addCallback("myCallback", myCallback);
}
}
protected function myCallback():void
{
trace(this);
}
protected function callJavascript():void
{
ExternalInterface.call("myCallback");
}
]]>
</mx:Script>
<mx:Panel width="100%" height="100%" click="callJavascript()"/>
</mx:Canvas>
HTML中的Javascript
function myCallback()
{
getFlashContent().myCallback();
}
function getFlashContent()
{
return document.getElementById("MyApp");
}
示例应用
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*">
<mx:Panel id="panel" width="100%" height="100%" >
<local:TestObject width="100%" height="50"/>
<local:TestObject width="100%" height="50"/>
<local:TestObject width="100%" height="50"/>
</mx:Panel>
</mx:Application>
输出(点击时)
MyApp.panel.TestObject34
MyApp.panel.TestObject34
MyApp.panel.TestObject34
解决方法是在Manager / Util类中进行所有这些ExternalInterface.addCallback("myCallback", myCallback);
调用(类似于单例)。然后确保只添加一次。然后,您可以将单个项目传递给方法。
兰斯