无法从Javascript调用Flash函数
我到处都找不到答案。我在HTML页面中有一个.swf,我正试图从javascript调用其中的一个函数。我可以从flash到javascript进行对话,但我无法让它进行回复。我知道我正确地瞄准了对象,因为我在对象上使用了console.log(),并确认了它瞄准的对象 我从flash触发测试,从.swf内部调用javascript函数,并让该函数调用内部flash函数 闪存代码:无法从Javascript调用Flash函数,javascript,flash,function,externalinterface,Javascript,Flash,Function,Externalinterface,我到处都找不到答案。我在HTML页面中有一个.swf,我正试图从javascript调用其中的一个函数。我可以从flash到javascript进行对话,但我无法让它进行回复。我知道我正确地瞄准了对象,因为我在对象上使用了console.log(),并确认了它瞄准的对象 我从flash触发测试,从.swf内部调用javascript函数,并让该函数调用内部flash函数 闪存代码: //adds callback ExternalInterface.addCallback("sendToFlas
//adds callback
ExternalInterface.addCallback("sendToFlash", flashTalkedTo);
//function called by the callback
public function flashTalkedTo():void{
//runs another function in javascript to log a string
ExternalInterface.call("callMe")
}
//calls javascript that tries to talk to Flash
ExternalInterface.call("catchFromFlash")
Javascript代码:
//function called by Flash that initiates
function catchFromFlash(){
talkToFlash()
}
//function that tries to talk to flash
function talkToFlash(){
document.getElementById('Noodleverse').sendToFlash()
}
//function called by Flash in the end to confirm call made
function callMe(){
console.log("Call Me")
}
任何帮助都有效,谢谢 Flash和插件一般来说都有点复杂。它们的行为不像普通元素,它们的函数也不像普通函数。例如,您不能将元素保存到值中并从该值调用函数。您还需要小心,因为在某些浏览器中使用
对象
,而在其他浏览器中使用嵌入
调用函数的最佳方法是使用swfobject()抽象所有内容。但就我个人而言,我使用这个(根据经验,也许有人可以提供改进):
HTML:
第一种情况(
文档
)适用于大多数新浏览器。例如,Chrome将找到嵌入对象。第二个(窗口
)用于IE并查找对象
(IE,至少是旧IE,忽略嵌入
)。我不能100%确定是否需要第二个,因为IE可能也可以使用文档
,所以称之为巫毒代码。还有window.myplugin
将提供Chrome、FireFox等浏览器中所有匹配元素的数组(但我们希望这些元素已经得到处理)哪个HTML元素具有Noodleverse
id?显示粗略的HTML结构会有所帮助。另外,在talkToFlash
中执行console.log(document.getElementById('Noodleverse'))
以确认它确实运行,并且找到了正确的元素。我已经对调用的片段执行了console.log(),并且工作正常。我希望不要使用SWFObject,因为我已经试过了,它给我带来了布局问题。@user2225288所以。。。你还有问题吗?你试过我发布的代码了吗?
<object id="myplugin" ...>
...
<embed name="myplugin" ... />
</object>
var o1=document.myplugin;
if(o1&&!!o1.myFlashFunction){
return document.myplugin.myFlashFunction(); // DO NOT USE o1 here. It will fail.
}
var o2=window.myplugin;
if(o2&&!!o2.myFlashFunction){
return window.myplugin.myFlashFunction(); // DO NOT USE o2 here
}