2013-05-13 4 views
5
<html> 
<body> 

<button type="button" onclick="clickme()">Click Me</button> 

<script> 
var test = 0; 

function clickme() { 
    test = 1; 
    console.log(test); 
} 

window.onunload = function() { 
    alert("test"); 
} 
</script> 

</body> 
</html> 

Я использую этот простой код для проверки некоторых вещей с onunload и onbeforeunload. По какой-то причине, когда я обновляю/оставляю страницу и вызывают событие onunload, я не получаю предупреждения и ошибки в консоли Firebug. Если я использую onbeforeunload, это работает, и я не получаю ошибки, но я слышу, что onbeforeunload не очень хороший кросс-браузер.Ошибка OnUnload Alert «NS_ERROR_NOT_AVAILABLE»

NS_ERROR_NOT_AVAILABLE: Component returned failure code: 0x80040111  
(NS_ERROR_NOT_AVAILABLE) [nsIDOMWindow.alert] 

alert("test"); 

Я не пытаюсь предупредить тестовую переменную, просто текст «тест», прежде чем кто-либо попытается указать на это.

+0

вы пробовали эту вещь в IE ...? – Pandian

+1

["Теперь методы showModalDialog()', 'alert()', 'confirm()' и 'prompt() теперь ничего не могут делать во время просмотра страницы, перед загрузкой и выгрузкой событий."] (Http: // www .w3.org/TR/html5-diff/# changes-2011-05-25) –

+0

@Pandian Ясно ошибка Firefox (подсказки: посмотрите на префиксы 'NS_' и' nsI' и упоминание Firebug). –

ответ

13

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

  • Замечательно, что всплывающее сообщение имеет 2 кнопки: «ОК» и «Отмена».
  • Если пользователь нажимает кнопку OK, браузер будет продолжать перемещаться от страницы
  • Если пользователь нажимает Cancel, браузер будет отменить выгрузку и остаться на текущей странице
  • События onbeforeunload является единственным всплывающее, что может отменить событие OnUnload

пример приведен ниже:

<script type="text/javascript"> 

window.onbeforeunload=before; 
window.onunload=after; 

function before(evt) 
{ 
    return "This will appear in the dialog box along with some other default text"; 
    //If the return statement was not here, other code could be executed silently (with no pop-up) 
} 

function after(evt) 
{ 
    //This event fires too fast for the application to execute before the browser unloads 
} 

</script> 

Похоже, вы пытаетесь сделать предупреждение в случае OnUnload. Проблема здесь в том, что уже слишком поздно. Страница уже выгружается, и ее не остановить. Вы можете получить предупреждающее сообщение для показа, но не имеет значения, что пользователь нажимает, потому что страница уже выгружается.

Лучше всего пойти с событием onbeforeunload.

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