我遇到的问题是IE使用Flash CS4中的EternalInterface类将字符串传回swf。
我有一个带有以下代码的swf:
var externalString:String = ExternalInterface.call("IncomingJS")
位于附加到Event.ENTERFRAME的事件侦听器内,以及等待ExternalInterface.available的if语句。
IncomingJS
函数如下所示:
function IncomingJS() {
return stringFromHTML;
}
并使用swf坐在HTML页面上。
我能够成功获取externalString
变量,并在Firefox,Safari和Chrome中使用其余的AS3脚本,但不能在IE中使用。
如果我在Javascript中的return语句之前添加alert (stringFromHTML)
,我会得到stringFromHTML
垃圾邮件的值,看起来Flash正在以正确的速率触发该函数。
用于swf的HTML嵌入代码有点简单:
<object width="750" height="200" id="controlledScale"><param name="movie" value="http://www.myURL.com/controlledScale.swf"><param name="allowScriptAccess" value="sameDomain" /><embed src="http://www.myURL.com/controlledScale.swf" width="750" height="200" allowScriptAccess="sameDomain"></embed></object>
非常感谢任何帮助或建议。
谢谢, DavidB
我意识到SWF嵌入代码有多糟糕。 不幸的是,HTML代码实际上是在第三方HTML生成器中工作,其中一个限制是我一次只能拥有一行(无限长度)的html。
其他选项(swfObject等)是否能够在代码中没有换行符运行,或者我是否要求使用Javascript和SWF来解决问题,而不是直接嵌入SWF,使用类似iFrame和请参考“正确的”flash delpoyment html文件?
在这一点上有点我甚至不确定问题实际位于何处。 swf是发现在所有浏览器上发送到Javascript,只是没有在IE中获取信息。
答案 0 :(得分:0)
您必须在对象标记中添加id
才能在IE中使用。
<object width="750" id="myflash" height="200"><param name="movie" value="http://www.myURL.com/controlledScale.swf"><param name="allowScriptAccess" value="sameDomain" /><embed src="http://www.myURL.com/controlledScale.swf" width="750" height="200" allowScriptAccess="sameDomain"></embed></object>
答案 1 :(得分:0)
我非常确定IE中有一个安全“功能”可以阻止JS从Flash调用太多次,以阻止它崩溃浏览器。
你有必要每帧调用一次吗?
我建议不惜一切代价,因为这会对浏览器造成很大的压力。
*****编辑*****
如果你想从JS调用ExternalInterface方法 - &gt;在IE中使用Flash,您必须略微区别地引用该对象,如下所示:
function thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName];
} else {
return document[movieName];
}
}
然后,一旦确定要传递的字符串构造正确,就可以从JS中调用它:
thisMovie( "theFlashElementID" ).giveMeMyStringAlready();
然后在你的Flash中你会有这样的东西:
if( ExternalInterface.available )
{
ExternalInterface.addCallback( "giveMeMyStringAlready", handleTheStringFromJS );
}
else
{
handleTheFactIDontHaveExternalInterfaceAvailable();
// the only reason this would be is if container that
// is embedding the swf isn't fully loaded by the browser
}
AS3 docs关于ExternalInterface的杰出代码是:
注意:使用外部API时 HTML,始终检查HTML有 在尝试之前完成加载 调用任何JavaScript方法。
答案 2 :(得分:0)
此:
不幸的是,HTML代码是 实际上是在第三方工作 HTML生成器
是问题。
swf位于<form>
标记内。
在浏览器阶段,有大量非常冗长的代码,我在html代码的开头和结尾都错过了标签。
感谢您的帮助。如果我从经验中没有学到任何东西,那就是充满了问题并远远超出眼前的问题,尽可能地完全打破每个元素。