javascript - Adobe ExternalInterface 在 IE9 中不工作

标签 javascript flash actionscript internet-explorer-9 externalinterface

我正在从 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");
    }
}

最佳答案

我在 IE9 上遇到过同样的问题,对我来说,是 IE9 缓存闪存的问题。尝试清除浏览器缓存(开发者工具为 f12,我认为有一个清除缓存的图标或 ctrl-R),然后再次尝试。

如果不行,请尝试通过将对 actionscript 的 javascript 调用延迟 1 或 2 秒来进行调试,大致如下:

<SCRIPT LANGUAGE='Javascript'>

function delayForFlash() {
setTimeout("startFlash()", 1000);
}

function startFlash() {
getFlashMovie("flashdemo").restartFlash();
}

window.onload = function(){ delayForFlash();}
</SCRIPT>

这是为了让您的闪光灯有足够的时间加载所有内容。

关于javascript - Adobe ExternalInterface 在 IE9 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6763135/

相关文章:

外部链接的 Javascript 不起作用

javascript - 在 ContextMenu Click 上发送请求到注入(inject)的内容脚本

php - ActionScript 看不到文本框的更改

javascript - 在哪里可以找到可用的开源 3d 图表?

apache-flex - 如何从Flash Builder 4自动构建多个swf?

flash - ActionScript 2 在 4 个数字之间随机

javascript - 这种嵌套算法的名称是什么?

javascript - 类型错误 : undefined is not a function when triggering AJAX requests in ASP. NET

php - IE SCRIPT16389 错误与 Flash ExternalInterface 回调和 JQuery slider

PHP + gzip : close connection and continue executing