Actionscript:ExternalInterface.addCallback在IE中不起作用

时间:2011-02-09 18:33:18

标签: actionscript-3

HTML:

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%" id="testqwe">
    <param name="movie" value="http://www.mydomain.com/swf/testqwe.swf" />
    <param name="bgcolor" value="#ffffff" />
    <param name="allowScriptAccess" value="always" />
    <embed name="testqwe" src="http://www.mydomain.com/swf/testqwe.swf" width="100%" height="100%" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>

Javascript:

try {
    if(navigator.userAgent.indexOf('MSIE') != '-1') {
        var embed = jQuery('#testqwe')[0];
    }
    else {
        var embed = jQuery('#testqwe embed')[0];
    }
}
catch(e)
{
    log({error:e});
}

的ActionScript:

private function jsAPI():void{
    ExternalInterface.addCallback("callfromjs",callfromjs);
}
private function callfromjs(js:Object):void{
 //code here
}

当我试图调用embed.callfromjs()时,它表示Object不支持此属性或方法。

我做错了什么?我认为问题出在html标记中。可能遗漏了一些东西,或者我在某个地方犯了错误。

它在Firefox / Chrome / Opera中运行,但并非在所有IE中都有效。

帮助!花了大约4-5个小时而没有......

5 个答案:

答案 0 :(得分:2)

尝试为您的embed标记添加id属性,并为您的对象标记添加name属性。我以前遇到过这个问题,在我看来修复就是这样的。

答案 1 :(得分:2)

我正在使用jquery所以我使用插件因为它们非常容易。

我不得不从jquery.flash插件切换到jquery.SWFObject插件。因为jquery.flash插件根本不起作用,在刷新或导航离开页面时会出现同样的错误。

现在我正在使用SWFObject jquery插件,并将内部回调名称从“stop”(保留字)更改为“kill”,一切都开始正常工作。似乎已经解决了问题。

Firefox似乎工作正常并覆盖了该功能,IE崩溃了(这并不奇怪。)

IE给了我以下错误: “对象不支持此属性或方法”第48行第3行

我写了一篇关于jquery.flash插件问题的Luke(作者)。我认为他没有使用可能导致失败的两个包装纸,肯定不知道。 IE FAIL。

fwiw,当我使用jquery.flash插件时,当我离开/离开页面时,IE给了我同样的错误。

“对象不支持此属性或方法”第53行char 3。

注意:插件之间的细微差别是使用“src”而另一个使用“swf”来声明SWF路径。

希望这有用。

答案 2 :(得分:0)

试试这个:

var getFlash = function(name) {
       if (navigator.appName.indexOf("Microsoft") != -1) {
           return window[name];
       } else {
           return document[name];
       }
    };

答案 3 :(得分:0)

您是否验证了if中正确的阻止来自IE?

您是否尝试使用SWFObject加载SWF? Persoanlly,我总是使用动态方法向页面添加内容。这将消除浏览器嗅探的需要。 SWFObject也有API,如果你真的需要使用静态发布,可以通过id调用flash应用程序。

顺便说一下,即使它已被弃用,请查看jQuery.browser而不是自己解析UA字符串。 SWFObject API还有一个UA解析器和一些你可以使用的标志。

答案 4 :(得分:0)

我想在上面添加Shanimal的帖子:我们发现IE8特别有几个关键字,无法通过flash的ExternalInterface.addCallback添加。添加这些关键字将导致

“对象不支持此属性或方法JScript - 脚本块,第48行字符3”

调用第一个时出现

错误。有点令人困惑的是,所有其他方法都没问题,外部界面将继续运行,前提是您不要使用这些关键字调用方法。

到目前为止确定的关键字列表:停止,缩放,平移。

IE9和其他浏览器似乎很好。如果您收到此错误,请尝试重命名回调。 IE8不是很可爱吗? ; - )