Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从Javascript调用Flash函数_Javascript_Flash_Function_Externalinterface - Fatal编程技术网

无法从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

我到处都找不到答案。我在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")
}

任何帮助都有效,谢谢

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
}