引用对调用的javascript函数进行ExternalInterface.call的html对象
我很抱歉,如果我的术语不正确,我的动作脚本技能相当弱 所以,我有一些动作脚本,使一个 调用('someFunction') 打电话 是否可以使用ExternalInterface.call调用直接引用调用某个函数的html对象 假设进行调用的对象也有一些回调(通过ExternalInterface.addCallback),这些回调可以通过javascript访问 目前:引用对调用的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
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]();
}