2

我在 html 容器中嵌入了带有 swfobject 的 Flash 电影。通过ExternalInterface我已经注册了一个 Javascript 函数来触发我的 Flash 应用程序的回调。

ExternalInterface.addCallback("notifyClose", notifyOnClose );

Javascript 函数作为事件侦听器添加到 fire onbeforeunload

<script language="JavaScript">
        
        function getSWF(movieName) {
            if (navigator.appName.indexOf("Microsoft") != -1){
               return window[movieName];
            }else { return document[movieName];}
        }           
        
        var bye = function() {
            getSWF('flashContainer').notifyClose('> WE ARE CLOSING APP!');
            //alert('WE ARE CLOSING APP!.');
        };
        
        var hola = function(){
            getSWF('flashContainer').notifyClose('> WE ARE opening APP!');
            alert('WE ARE opening APP!.');
        };
        
        if(window.addEventListener) {
            window.addEventListener('load', hola,false);
            window.addEventListener('beforeunload', bye, false);
        } else if (window.attachEvent) {
            window.attachEvent('onload', hola);
            window.attachEvent('onbeforeunload', bye);
        }
        
</script>

我已经在 Firefox 和 IE 中进行了测试。Firefox 按预期工作,但不能在 IE 中工作。在 IE 中,我在 Flash 中收到onload消息通知,但不是onbeforeunload.

这是某种沙盒限制吗?只是糟糕的代码?

4

1 回答 1

-1

问题是您在attachEvent()中的代码中的“on”。

if(window.addEventListener) {
            window.addEventListener('load', hola,false);
            window.addEventListener('beforeunload', bye, false);
        } else if (window.attachEvent) {
            window.attachEvent('onload', hola);
            window.attachEvent('onbeforeunload', bye);
        }

为您的事件侦听器代码尝试以下代码,并查看以下链接以获取更多信息:http ://bytes.com/topic/javascript/answers/147027-addeventlistener-function-ie

//*** This code is copyright 2003 by Gavin Kistner, !@phrogz.net
//*** It is covered under the license viewable at http://phrogz.net/JS/_ReuseLicense.txt
//*** Reuse or modification is free provided you abide by the terms of that license.
//*** (Including the first two lines above in your source code satisfies the conditions.)


//***Cross browser attach event function. For 'evt' pass a string value with the leading "on" omitted
//***e.g. AttachEvent(window,'load',MyFunctionNameWithoutParenthesis,false);

function AttachEvent(obj,evt,fnc,useCapture){
    if (!useCapture) useCapture=false;
    if (obj.addEventListener){
        obj.addEventListener(evt,fnc,useCapture);
        return true;
    } else if (obj.attachEvent) return obj.attachEvent("on"+evt,fnc);
    else{
        MyAttachEvent(obj,evt,fnc);
        obj['on'+evt]=function(){ MyFireEvent(obj,evt) };
    }
} 

//The following are for browsers like NS4 or IE5Mac which don't support either
//attachEvent or addEventListener
function MyAttachEvent(obj,evt,fnc){
    if (!obj.myEvents) obj.myEvents={};
    if (!obj.myEvents[evt]) obj.myEvents[evt]=[];
    var evts = obj.myEvents[evt];
    evts[evts.length]=fnc;
}
function MyFireEvent(obj,evt){
    if (!obj || !obj.myEvents || !obj.myEvents[evt]) return;
    var evts = obj.myEvents[evt];
    for (var i=0,len=evts.length;i<len;i++) evts[i]();
}
于 2010-02-15T15:27:24.290 回答