引用对调用的javascript函数进行ExternalInterface.call的html对象

引用对调用的javascript函数进行ExternalInterface.call的html对象,javascript,object,actionscript,reference,externalinterface,Javascript,Object,Actionscript,Reference,Externalinterface,我很抱歉,如果我的术语不正确,我的动作脚本技能相当弱 所以,我有一些动作脚本,使一个 调用('someFunction') 打电话 是否可以使用ExternalInterface.call调用直接引用调用某个函数的html对象 假设进行调用的对象也有一些回调(通过ExternalInterface.addCallback),这些回调可以通过javascript访问 目前: Actionscript source ExternalInterface.call("someFunction"); E

我很抱歉,如果我的术语不正确,我的动作脚本技能相当弱

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

调用('someFunction')

打电话

是否可以使用ExternalInterface.call调用直接引用调用某个函数的html对象

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

目前:

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();
}
再一次,对术语表示抱歉。试图为将来的搜索添加尽可能多的关键词


谢谢

我想你说的是ExternalInterface.objectID。此属性返回与对象或嵌入标记中的flash容器关联的id

我建议您还应该将“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"]();
}
编辑:如果您真的想在某些函数参数中获得对flash DOM对象的引用,您可以通过一种有点棘手的方式来实现它(我宁愿不这样做,但只是出于您的兴趣)


通过这种方式,您可以将一些来自flash的JS代码注入JS。它可以工作,但看起来很凌乱。

接近于我所寻找的,但我希望更像是传递对实际对象本身的引用,而不是id名称的字符串。很可能我要找的东西不可能;)就我所知,这绝对不可能。您通过ExternalInterface调用的参数传递的所有内容都会序列化,因此您无法在此过程中获取引用。但是,您可以这样做:EI调用的第一个参数在JS中求值,您可以在其中放置的不仅仅是一个方法名。:)请参见上面答案中的我的编辑。
// 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]();
}