2013-06-09 2 views
0

мне нужно выполнить некоторый код, прежде чем покинуть браузер, я осуществил это:IE не выполняет свой код «OnUnload»

window.onbeforeunload = function() { return 'Are you sure?'; }; 
    window.onunload = function() { releaseLocking(); }; 

Она работает довольно хорошо с Google Chrome. При закрытии GC: отображается сообщение,

  • Если я нажму кнопку «остаться на странице», ничего не произойдет. Отлично.
  • если я нажму на кнопку «оставьте страницу», будет выполнен код в разделе releaseLocking. Отлично.

У меня проблемы с Internet Explorer.

  • если я нажму кнопку «остаюсь на странице», ничего не произойдет. Отлично.
  • если я нажму кнопку «оставьте страницу», код в разделе releaseLocking не будет выполнен.

Есть идеи?

Я искал много, но не нашел решение.

Спасибо.


UPDATE

var releaseLocking = function() { 
    // Release only if lock is set on the current user 
    if (transport().lockedById() == 5) { // 5 is dummy (Jean Dupont for testing) 
     transport().lockedById(null); 
     transport().lockedTime(null); 
     return ctxTransport.saveChanges(SILENTSAVE); 
    } 
}; 
+0

Что это связано с jquery? Если вы использовали jquery, ваша проблема может исчезнуть. –

+0

Я добавил jquery в теги, прежде чем я согласен с решением с jQuery, если что-то возможно ... – Bronzato

+0

Что делает 'releaseLocking'? Откуда вы знаете, что это не работает? –

ответ

0

Это кажется IE есть ошибка, когда событие выгрузить не сгореть на конкретную страницу на сайте.

событие разгрузки никогда не запускалось, так как все содержимое страницы не было загружено до того, как оно переместилось на другую страницу.

попытаться остановить его, прежде чем выгрузить

попробовать это:

function fixUnload() { 
    // Is there things still loading, then fake the unload event 
    if (document.readyState == 'interactive') { 
     function stop() { 
      // Prevent memory leak 
      document.detachEvent('onstop', stop); 

      // Call unload handler 
      unload(); 
     }; 

     // Fire unload when the currently loading page is stopped 
     document.attachEvent('onstop', stop); 

     // Remove onstop listener after a while to prevent the unload function 
     // to execute if the user presses cancel in an onbeforeunload 
     // confirm dialog and then presses the stop button in the browser 
     window.setTimeout(function() { 
      document.detachEvent('onstop', stop); 
     }, 0); 
    } 
}; 

function unload() { 
    alert('Unload event occured.'); 
}; 

window.attachEvent('onunload', unload); 
window.attachEvent('onbeforeunload', fixUnload); 
+0

Я уверен, что все содержимое моей страницы закончили загрузку, потому что я ждал достаточно времени (кроме того, я работаю локально). – Bronzato

+0

Я думаю, что это стоит закрыть. – Ofear

+0

К сожалению, это не работает: когда я закрываю браузер, он закрывается без каких-либо сообщений. – Bronzato

0

Эти типы событий очень ненадежно .. что если браузер аварии пользователя (лол то есть!) Я был в состоянии добиться того же результата, используя пульс и опрос сервера каждые 20-30 секунд (или более длинный идентификатор, какова ваша продолжительность), и использовать это для обработки выходного события. У меня также был механизм блокировки в этом приложении.

Удачи.

+1

Вы хотите сказать, что вы запустили сервер каждые 20-30 секунд, чтобы сказать «привет, я все еще там, не освобождаю замок»? – Bronzato

+0

Точно, вы можете продлить его, возможно, для проверки событий мыши или клавиатуры, чтобы сделать реальный тайм-аут простоя, если хотите. Взгляните на xhrs facebook. –

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