Actionscript 3 javascript communication:对象#<htmlembedelement>没有方法</htmlembedelement>

时间:2011-06-23 10:56:01

标签: javascript flash actionscript-3 externalinterface

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

  

对象#&lt; HTMLEmbedElement&gt;没有   方法

我将SWF放到页面中,如下所示:

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

动作脚本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");
});

我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

即使它可能无法解决您的问题,但Chrome也遇到了类似的问题。

修复是替换

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

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

如果embed / object的id属性为flash,则在flash中调用的函数为sendToActionScript

我不知道为什么会这样。

修改

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