向多个对象上的Flex发送Javascript通知

时间:2010-02-24 06:09:11

标签: javascript flex

我知道使用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

1 个答案:

答案 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);调用(类似于单例)。然后确保只添加一次。然后,您可以将单个项目传递给方法。

兰斯