Actionscript 3 javascript communication:Object #<HTMLEmbedElement> 没有方法



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

对象#<HTML嵌入元素>没有方法

我把我的SWF放在下面的页面上:

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

Actionscript 3代码:

function query(fn:String, ln:String):void {
    a_txt.text = fn + " " + ln;
}
ExternalInterface.addCallback("queryFlash", query);

最后是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可能还没有加载。您应该改为监听窗口的load事件。

尽管它可能无法解决您的问题,但我在Chrome上也遇到了类似的问题。

修复是更换

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

带有

((function(){return document.getElementById('flash');})()).sendToActionscript('test');

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

我不知道为什么这样有效。

编辑

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

相关内容

最新更新