引用将ExternalInterface.call作为调用的javascript函数的html对象

时间:2011-06-28 09:29:29

标签: javascript object actionscript reference externalinterface

如果我的术语不合适,我道歉,我的动作技巧非常弱。

所以,我有一些制作

的动作

ExternalInterface.call( 'someFunction');

呼叫。

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

假设进行调用的对象也有一些可以通过javascript访问的Callbacks(通过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();
}

再一次,对术语感到抱歉。试图在未来的搜索中使用尽可能多的关键字。

谢谢!

1 个答案:

答案 0 :(得分:3)

我猜你在谈论ExternalInterface.objectID。此属性返回与 object embed 标记中的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]();
}

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