我一直在这里找不到答案。我有一个.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")
}
任何帮助都有效,谢谢!
答案 0 :(得分:1)
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等中提供所有匹配元素的数组(但我们希望这些元素已经被处理)