2

У меня есть Flash-фильм, встроенный в swfobject в контейнер html. Через ExternalInterface Я зарегистрировал функцию javascript, чтобы активировать обратный вызов для моего флеш-приложения.IE onbeforeunload не запускает ExtenralInterface обратный вызов

ExternalInterface.addCallback("notifyClose", notifyOnClose); 

Функция javascript добавляется как событие listerner для запуска 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> 

Я тестировал в FF и IE. Firefox работает так, как ожидалось, но не в IE. В IE я получаю уведомление во Flash с сообщением onload, но не onbeforeunload.

Это какой-то король песочницы? Просто плохой код?

+0

Кроме того, если я заменить вызов ExternalInterface в функции свидания с вызовом AJAX , он тоже не работает. – goliatone

ответ

-1

Проблема заключается в том, что «включено» в вашем коде ниже в attachEvent().

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, [email protected] 
//*** 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](); 
} 
+0

@Tood Moses: Tnxs для ответа. Вы предполагаете, что тип события «onbeforeunload» неверен? Если да, то, что вы говорите, это правильный тип события? Теперь я проверяю вашу ссылку. – goliatone

+0

Ошибка onbeforeunload неверна. Слово «включено» перед тем, как оно находится в функции. Кажется, что IE имеет проблему с «включенным» в функции attachEvent. –

+0

Я немного смущен, не могли бы вы дать мне какую-либо ссылку, объясняющую, почему ie 'запутался' с 'on'? Мне кажется, что код, который вы предоставили, предназначен для использования в качестве вспомогательного метода браузера-наследника-браузера ... – goliatone

Смежные вопросы