【问题标题】:Javascript notifications to Flex on Multiple objects在多个对象上向 Flex 发送 Javascript 通知
【发布时间】:2010-02-24 14:51:14
【问题描述】:

我知道使用 ExternalInterface,我们可以注册可从 JavaScript 调用的 ActionScript 函数,但我想为一个在应用程序中创建多个实例的类注册 actionscript 函数。那么它将如何识别将从 java 脚本中调用哪个对象动作脚本函数。

例如:

1) Java 脚本:具有调用 Action 脚本函数 showAlert() 的函数 javaScripAlert();

即testSwf.alert(value);

函数javaScripAlert(值){

    TestSwf.alert();

}

2) ABC类有回调函数showAlert(value);它在类中注册回调函数“showAlert”..

即。外部接口。 addCallback("alert", showAlert);

3) TestApplication : 在此我创建了多个 Calss ABC 对象

我在 TestApplication 中创建了多个 ABC 类型的对象。因此,当我从 HTML 调用 javaScript 函数 javaScripAlert() 时,它只调用对象“abc3”的函数 showAlert (value),而不调用其他对象 abc1、abc2。

当时也调用其他对象的函数的任何方式。

感谢和问候, 桑杰·鲁帕雷利亚

【问题讨论】:

    标签: javascript apache-flex


    【解决方案1】:

    每个调用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
    

    一种解决方法是将所有这些 ExternalInterface.addCallback("myCallback", myCallback); 调用放在 Manager/Util 类中(一些类似单例的东西)。然后确保只添加一次。然后您可以将单个项目传递给方法。

    兰斯

    【讨论】:

    • 非常感谢,对桑杰帮助很大
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多