Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.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
Actionscript 3 javascript通信:对象#<;HTMLEmbedElement>;没有办法_Javascript_Flash_Actionscript 3_Externalinterface - Fatal编程技术网

Actionscript 3 javascript通信:对象#<;HTMLEmbedElement>;没有办法

Actionscript 3 javascript通信:对象#<;HTMLEmbedElement>;没有办法,javascript,flash,actionscript-3,externalinterface,Javascript,Flash,Actionscript 3,Externalinterface,我试图从Javascript调用Actionscript 3方法,但Chromes给出以下错误: 对象#没有 方法 我将我的SWF放在页面上,如下所示: <embed type="application/x-shockwave-flash" src="/subfolder/flash.swf" width="550" height="400" id="myFlash" name="myFlash" bgcolor="#FFFFFF" quality="high" /> 最后是Jav

我试图从Javascript调用Actionscript 3方法,但Chromes给出以下错误:

对象#没有 方法

我将我的SWF放在页面上,如下所示:

<embed type="application/x-shockwave-flash" src="/subfolder/flash.swf" width="550" height="400" id="myFlash" name="myFlash" bgcolor="#FFFFFF" quality="high" />
最后是Javascript:

function getFlashMovie(movieName) {
      var isIE = navigator.appName.indexOf("Microsoft") != -1;
      return (isIE) ? window[movieName] : document[movieName];
    }
$(document).ready(function() {
    getFlashMovie("myFlash").queryFlash("a", "b");
});

我在这里遗漏了什么吗?

jQuery的
ready()
对应于
DOMContentLoaded
事件。这意味着HTML页面完成了加载,您可以访问DOM,但这并不保证所有嵌入的图像和对象都完成了加载。所以你的Flash可能还没有加载。你应该听窗口的加载事件。

即使它不能解决你的问题,我也有一个类似的Chrome问题

解决办法是替换

document.getElementById('flash').sendToActionscript('test');

如果嵌入/对象的id属性是
flash
,而flash内部调用的函数是
sendToActionScript

我不知道为什么会这样

编辑
这似乎并不总是奏效。我发现使用创建对象似乎总是对我有用。

在flash回调功能就绪后加载事件会触发吗?@阿斯曼:它会在flash对象完成加载后触发-假设它在那时已经就绪。如果不是的话,你可能已经发现了一个Flash bug。是的,我很高兴只有在所有html对象(图像、SWF等等)都加载后,加载才会启动。这不能确保闪存完成并初始化。我找到的唯一正确的方法是添加一个javascript全局变量isFlashObjReady,并让flash调用一个javascript函数来将该变量设置为true。记住,我们在这里运行两个进程:浏览器和flash插件/activeX。这里有一个分离,根据flash应用程序可能需要处理。他可以尝试另一件事是一部电影(“myFlash”).queryFlash(“a”、“b”);试着接球,然后继续打电话,非常感谢。我知道我已经把瓦拉迪米尔·帕兰特的答案标记为正确答案,但奇怪的是,我又开始遇到这个问题。我一定会试试你在这里的建议。
document.getElementById('flash').sendToActionscript('test');
((function(){return document.getElementById('flash');})()).sendToActionscript('test');