Actionscript 3 AS3 ExternalInterface在IE中工作,但在Firefox中不工作
我正在尝试使用ExternalInterface从javascript执行AS3函数。在IE中似乎工作正常,但firefox总是返回未定义的javascript错误方法 我在谷歌上搜索了很久,排除了以下可能性: 1) 有些人说你需要在你的对象标签里有一个嵌入标签,所以增加了一个——没有运气 2) 许多人说,在调用javascript之前,需要确保flash已加载。我的电话是在按下页面上的链接之后。我总是先使用flash应用程序,然后只在最后按链接 3) 然后我想这可能是一个安全问题,因此添加了以下内容:Actionscript 3 AS3 ExternalInterface在IE中工作,但在Firefox中不工作,actionscript-3,firefox,externalinterface,Actionscript 3,Firefox,Externalinterface,我正在尝试使用ExternalInterface从javascript执行AS3函数。在IE中似乎工作正常,但firefox总是返回未定义的javascript错误方法 我在谷歌上搜索了很久,排除了以下可能性: 1) 有些人说你需要在你的对象标签里有一个嵌入标签,所以增加了一个——没有运气 2) 许多人说,在调用javascript之前,需要确保flash已加载。我的电话是在按下页面上的链接之后。我总是先使用flash应用程序,然后只在最后按链接 3) 然后我想这可能是一个安全问题,因此添加了以
try {
ExternalInterface.addCallback("test", testing);
trace("added callback");
}
catch (error:SecurityError) {
trace("Security Error:"+error.message);
}
catch (error:Error) {
trace("Error:"+error.message);
}
但它会打印出“添加的回调”:(
还有谁知道我还能尝试什么吗?我正在运行最新的Firefox和FlashPlayer 10
问候,
奥利如果您的flash在Firefox中运行正常,我们可以放心地认为试图调用该函数的HTML包装器或JavaScript代码有问题。发布这些内容将有很大帮助 但是,一般来说,IE将使用
标记,其他人将使用
标记。我认为最好的办法是使用jQuery来进行flash嵌入和调用,下面是我碰巧在IE、Firefox和Chrome上使用的简单HTML代码:
<object id="GAMENAME" classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'
codebase='http://download.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0'>
<param name="allowScriptAccess" value="always">
<param name="movie" value="game.swf">
<embed id="GAMENAME" name="GAMENAME" src="game.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"
allowScriptAccess="always">
</embed>
</object>
是的,它要求全局变量<代码> GAMENAME>代码>设置为Flash对象的名称。在这种情况下,它必须是“代码”>“GAMENAME”<代码>对应于上面的HTML。我刚才提到的这不是我所考虑的生产代码吗?< /P> 然后调用Flash对象,我使用类似于:
getGame().test()
这里的JavaScript可能并不完全合理,也不代表最佳实践,但它确实指出了在存在
与
和多个浏览器的情况下查找嵌入式flash对象时存在的问题。解决了这个问题。您需要为IE使用对象标记,为FF使用嵌入标记。尚未测试h其他浏览器,但希望嵌入标记也适用于它们
帮助其他人解决同样的问题。这是一个适用于我的HTML页面:)
问候,
奥利
测验
html,正文{高度:100%;背景色:#ffffff;}
正文{边距:0;填充:0;溢出:隐藏;}
#flashContent{宽度:100%;高度:100%;}
函数testIt(){
真空容器;
if(navigator.appName.indexOf(“Microsoft”)!=-1){
flashContainer=document.getElementById(“测试”);
}否则{
flashContainer=document.getElementById(“嵌入测试”);
}
test(“js说你好”);
}
这似乎是一个JavaScript问题,而不是Flash问题,这意味着错误可能在于您的JS代码。你用过FireBug的控制台吗?也许发布你的代码?
getGame().test()
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css" media="screen">
html, body { height:100%; background-color: #ffffff;}
body { margin:0; padding:0; overflow:hidden; }
#flashContent { width:100%; height:100%; }
</style>
</head>
<script>
function testIt(){
var flashContainer;
if(navigator.appName.indexOf("Microsoft") != -1){
flashContainer = document.getElementById("test");
}else{
flashContainer = document.getElementById("test-embedded");
}
flashContainer.test("js says hello");
}
</script>
<body>
<a href="#" onclick="testIt();">Press here</a>
<div id="flashContent">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" id="test" align="middle" width="550" height="400">
<param name="movie" value="test.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<param name="play" value="true" />
<param name="loop" value="true" />
<param name="wmode" value="transparent" />
<param name="scale" value="showall" />
<param name="menu" value="true" />
<param name="devicefont" value="false" />
<param name="salign" value="" />
<param name="allowScriptAccess" value="sameDomain" />
<embed src='test.swf' height='400' width='550' id='test-embedded' PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></embed>
</object>
</body>
</html>