所以,我有一些制作
的动作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();
}
再一次,对术语感到抱歉。试图在未来的搜索中使用尽可能多的关键字。
谢谢!
答案 0 :(得分:3)
我猜你在谈论ExternalInterface.objectID。此属性返回与 object 或 embed 标记中的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"]();
}
编辑:如果你真的想在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。它有效,但看起来很乱。