【发布时间】:2011-07-20 13:56:36
【问题描述】:
我正在从 JavaScript 调用 Actionscript 函数,它适用于除 IE9 之外的所有浏览器。我把它缩小到检索电影对象的 js 函数:
<script type="text/javascript">
var swf;
...
function flashReady() // This is called from ActionScript
{
swf = getSWF("MyMovie");
swf.MyExternalFunction();
}
function getSWF(movieName)
{
if (navigator.appName.indexOf("Microsoft") != -1)
{
return window[movieName];
}
else
{
return document[movieName];
}
}
...
</script>
这是我的 HTML:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="1" height="1" id="MyMovie">
<param name="allowScriptAccess" value="always" />
<param name="movie" value="/swf/movie.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffcc00" />
<embed src="/swf/movie.swf" quality="high" bgcolor="#ffcc00" width="1" height="1" name="MyMovie" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
当我这样调用外部函数时:
swf.MyExternalFunction();
在 IE9 中我得到一个 JS 错误:
"Object doesn't support property or method 'MyExternalFunction'"
显然window[movieName] 对IE 很好,但在IE9 中却不像以前那样工作了。 有什么建议吗?
:::UPDATE:::
到目前为止,这是我的解决方案。它可能看起来不漂亮,但它确实有效:
var movie = false;
function initSWF(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
//alert("IE");
if (typeof (window[movieName].MyExternalFunction) == 'function') {
// alert("< IE9");
movie = window[movieName];
}
else if (typeof (document[movieName].MyExternalFunction) == 'function') {
// alert(">= IE9");
movie = document[movieName];
}
}
else {
// alert("NON IE");
movie = document[movieName];
}
return ((movie) ? true : false);
}
然后使用如下:
function flashReady() // This is called from ActionScript
{
if(initSwf("MyMovie")) {
movie.MyExternalFunction();
} else {
alert("Failed to initialize");
}
}
【问题讨论】:
-
可能不相关,但您应该使用
<script type="text/javascript">而不是<script language="JavaScript"> -
是的,谢谢,我实际上使用了type="text/javascript",但这应该没关系。
-
你什么时候调用你的外部函数?调用 Flash 对象时可能未加载它。另外我们不是在 1990 年,
document.getElementById适用于所有浏览器,请勿使用window[movieName]或document[movieName]。 -
我有一个 flashReady() JS 函数,一旦加载,它就会从 swf 中调用。反过来,它尝试通过从 getSWF() 获取正确的对象来进行初始化。据我所知,window[movieName] 得到
-
@OctoRazor 所有这些,
window[movieName]是 IE 的一个旧功能,用于通过他的 ID 获取元素。document.getElementById现在是通过他的 id 访问元素的标准方式。它适用于所有浏览器,除非您使用超过 14 年的浏览器(例如:IE4)。
标签: javascript flash actionscript internet-explorer-9 externalinterface