2

我一直在这里,找不到答案。我有一个位于 HTML 页面中的 .swf,我试图从 javascript 调用其中的一个函数。我可以从 Flash 与 javascript 对话,但我无法让它重新对话。我知道我正确地定位了对象,因为我在其上使用了 console.log() 并确认了它的目标。

我正在从 Flash 触发测试,从 .swf 内部调用一个 javascript 函数,并让该函数调用内部 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")
}

任何帮助都有效,谢谢!

4

1 回答 1

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 等中所有匹配元素的数组(但我们希望这些元素已经得到处理)

于 2013-03-29T18:37:43.870 回答