Есть ли способ предотвратить запуск события onbeforeunload при использовании Internet Explorer? - PullRequest
6 голосов
/ 04 мая 2010

У меня есть функция, которая должна срабатывать, когда пользователь закрывает свой браузер, и я поместил код в функцию "window.onbeforeunload".

Дело в том, что каждый раз, когда я перезагружаю страницу в Internet Explorer, также запускается событие onbeforeunload, что является проблемой, потому что я хочу, чтобы оно запускалось только тогда, когда пользователь закрывает или уходит с текущей страницы, но не обновление / перезагрузка страницы.

Поэтому я не уверен, что onbeforeunload предназначен для запуска даже при обновлении / перезагрузке страницы, и если он предназначен, то есть ли другой способ обойти это? Спасибо

Ответы [ 3 ]

2 голосов
/ 28 мая 2010

Поскольку вы полагаетесь на javascript как есть, возможно, вы захотите разобраться с решением вопроса, почему они должны обновить страницу. Вы можете использовать XMLHttprequest для обновления контента для них, чтобы требуемая функция onbeforeunload вызывалась только тогда, когда это необходимо.

0 голосов
/ 03 июля 2010

Даже если вы используете XMLHttprequest для обновления, IE имеет проблему. Вы должны вызвать функцию javascript, которая содержит XMLHttprequest, например,

<a href="javascript:void(0)" onclick="addContent();">click to add content</a> 

вызовет событие onbeforeunload в IE, но не в Safari или Firefox.

Одно из решений, которое будет работать в некоторых ситуациях, - это обработать событие условно, отключить его, когда вы захотите загрузить контент, затем включить его снова

var guard = true; 
function myOnbeforeunloadHandler() 
{   
    if(guard)
    {
        return "you are about to leave the page and lose data";
    } 
}

function addContent()
{
    getElementById("myDiv").html = "<p>some content</p>";
    guard = true;
}

<a href="javascript:void(0) onclick="guard=false;addContent();> click to add content</a>
0 голосов
/ 04 мая 2010

Нет умного способа обойти это. Любое действие по выгрузке на странице вызовет события unload и beforeunload, и нет никакой возможности определить разницу между обновлением и навигацией.

Вы можете попробовать несколько вещей, но нет 100% метода. Например, захват клавиш F5 или Ctrl + R идентифицирует обновление, для которого можно было бы сбросить обработчик onbeforeunload, но он не будет работать для пользователей, которые нажимают кнопку обновления / перезагрузки на своей панели инструментов. Вы можете прикрепить обработчик событий ко всем щелчкам на элементе <a> или любых <form> onsubmit с, но это не поможет пользователям, которые вводят новый адрес в адресную строку со своей страницы.

...