无法从Javascript调用Flash函数

时间:2013-03-29 18:12:01

标签: javascript flash function externalinterface

我一直在这里找不到答案。我有一个.swf坐在HTML页面中,我试图从javascript中调用它内部的函数。我可以从flash谈到javascript,但是我无法回复它。我知道我正在正确地定位对象,因为我在它上面使用了console.log()并确认了它的目标。

我从flash触发测试,从.swf内部调用javascript函数,并让该函数调用内部Flash函数。

Flash代码:

//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")
}

任何帮助都有效,谢谢!

1 个答案:

答案 0 :(得分:1)

一般来说,Flash和插件有点繁琐。它们的行为与普通元素不同,它们的功能与普通函数不同。例如,您无法将元素保存为值并从中调用函数。您还需要小心,因为在某些浏览器中使用object,而在其他浏览器中使用embed

调用函数的最佳方法是使用swfobject(https://code.google.com/p/swfobject/)来抽象所有内容。就个人而言,我使用这个(基于经验,也许有人可以提供改进):

HTML:

<object id="myplugin" ...>
    ...
    <embed name="myplugin" ... />
</object>

JavaScript的:

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
}

第一种情况(document)适用于大多数新浏览器。例如,Chrome会找到embed对象。第二个(window)用于IE并找到object(IE,至少是旧IE,忽略embed)。我不是100%肯定第二个是必需的,因为IE也可能与document一起工作,所以称之为voodoo代码。另外window.myplugin会在Chrome,FireFox等中提供所有匹配元素的数组(但我们希望这些元素已经被处理)