Ошибка предупреждения при выгрузке NS_ERROR_NOT_AVAILABLE

<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 не очень хорошо работает в разных браузерах.

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

alert("test");

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


person Cains    schedule 13.05.2013    source источник
comment
вы пробовали это в IE...?   -  person Pandian    schedule 13.05.2013
comment
@Pandian Очевидно, ошибка Firefox (подсказки: посмотрите на префиксы NS_ и nsI и упоминание Firebug).   -  person Rob W    schedule 13.05.2013
comment
@Rob Я почти уверен, что сделал то же самое с onbeforeunload, и предупреждение прошло нормально, хотя я проверю еще раз, когда вернусь домой, чтобы убедиться. Означает ли это, что вы уверены, что хотите уйти? оповещения пропали? В качестве дополнительного вопроса могу ли я использовать переменную со страницы в кросс-браузерной функции, которая запускается при обновлении/закрытии страницы? Кажется, что unload буквально выгружает переменные, и поэтому onbeforeunload полезен, но многие говорят, что unbeforeunload не подходит для разных браузеров.   -  person Cains    schedule 13.05.2013


Ответы (1)


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

  • Самое замечательное в этом то, что всплывающее сообщение имеет 2 кнопки: OK и Отмена.
  • Если пользователь нажмет «ОК», браузер продолжит переход со страницы.
  • Если пользователь нажмет «Отмена», браузер отменит выгрузку и останется на текущей странице.
  • Событие 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.

person Brian    schedule 04.06.2013