【问题标题】:referencing the html object that made the ExternalInterface.call to the javascript function called引用使 ExternalInterface.call 调用的 javascript 函数的 html 对象
【发布时间】:2011-06-28 09:29:28
【问题描述】:

如果我的术语有问题,我深表歉意,我的动作脚本技能相当薄弱。

所以,我有一些动作脚本可以制作一个

ExternalInterface.call('someFunction');

打电话。

是否可以直接使用 ExternalInterface.call 调用来引用调用 someFunction 的 html 对象?

假设进行调用的对象也有一些可通过 javascript 访问的回调(通过 ExternalInterface.addCallback)。

目前:

Actionscript source

ExternalInterface.call("someFunction");
ExternalInterface.addCallback("someCallback",someASfunction);

Javascript source

function someFunction(){
    document.getElementById('idOfSWFObject').someCallback();
}

我想一定有办法:

Actionscript source

ExternalInterface.call("someFunction",THE_OBJECT_MAKING_THE_CALL);
ExternalInterface.addCallback("someCallback",someASfunction);

Javascript source

function someFunction(o){
    o.someCallback();
}

再次对术语感到抱歉。试图用尽可能多的关键字来搭配它以供将来搜索。

谢谢!

【问题讨论】:

    标签: javascript object actionscript reference externalinterface


    【解决方案1】:

    我猜你说的是 ExternalInterface.objectID。此属性返回与 objectembed 标记中的 flash 容器关联的 id。

    http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html?filter_flex=4.1&filter_flashplayer=10.2&filter_air=2.en#objectID

    我建议您也应该将“someCallback”的名称传递给您的 JS 方法。这样就不需要在 JS 中硬编码了。

    这是一个例子

    // Actionscript source
    
    const jsMethodName:String = "someFunction";
    const asCallbackName:String = "someCallback";
    ExternalInterface.call(jsMethodName+"(document.getElementById("++")"++");");
    ExternalInterface.addCallback(asCallbackName,someASfunction);
    
    // Javascript source
    
    function someFunction(flashId, callbackName) 
    {
        var flashContainer = document.getElementById(flashId);
        flashContainer["callbackName"]();
    }
    

    编辑:如果你真的想在 someFunction 参数中获得对 flash DOM 对象的引用,你可能会以一种有点棘手的方式来实现它(我宁愿不这样做,但只是为了你的兴趣)。

    // Actionscript source
    
    const jsMethodName:String = "someFunction";
    const asCallbackName:String = "someCallback";
    ExternalInterface.addCallback(asCallbackName,someASfunction);
    
    ExternalInterface.call(
        "function(){"+ 
            jsMethodName+"("+
                "document.getElementById('"+ExternalInterface.objectID+"'),"+
                "'"+asCallbackName+"'"+
            ");"+
        "}"
    );    
    
    // Javascript source
    
    function someFunction(flashContainer, callbackName) 
    {
        flashContainer[callbackName]();
    }
    

    这样你就可以将一些 JS 代码从 flash 中注入到 js 中。它可以工作,但看起来很乱。

    【讨论】:

    • 接近我正在寻找的东西,但我希望更像是传递对实际对象本身的引用而不是 id 名称的字符串。我正在寻找的东西很可能是不可能的;)
    • 好吧,据我所知,这绝对是不可能的。您通过 ExternalInterface 调用的参数传递的所有内容都会被序列化,因此您无法在此过程中获得引用。但是,您可以做到这一点:EI 调用的第一个参数在 JS 中进行评估,您可以在那里放置的不仅仅是一个方法名称。 :) 在上面的答案中查看我的编辑。
    猜你喜欢
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多