window.onbeforeunload и window.location.href в IE - PullRequest
8 голосов
/ 23 марта 2010

Мы используем window.location.href для навигации пользователя по странице. Кроме того, мы настроили событие window.onbeforeunload для предупреждения пользователей о наличии несохраненных изменений.

window.onbeforeunload = confirmBeforeClose;

function confirmBeforeClose() {
    if (jwd.global.inEditMode)
        return "Your changes will not be saved :) and you will be punished to death";
}

В местах, где есть несохраненные изменения, и я пытаюсь использовать window.location.href для навигации по пользователю, я получаю сообщение с предупреждением.

Работает нормально, если я нажимаю ОК во всплывающем окне. Однако, если я нажимаю ОТМЕНА, JS выдает неопределенную ошибку в window.location.href.

Любая помощь приветствуется.

1 Ответ

11 голосов
/ 28 апреля 2010

Я также испытывал эту проблему (в IE7 и выше, но не в IE6).

Единственное решение, которое я смог найти, - это обернуть вызов window.location.href в блок try / catch.

Ниже приведен полный пример, который воспроизводит проблему. Если вы раскомментируете команду try / catch, она будет работать во всех браузерах как нужно.

JavaScript (в заголовке HTML):

  window.onbeforeunload = confirmBeforeClose;

  function confirmBeforeClose( )
  {
    return 'You have made changes on this page that will be lost if you navigate away without saving.';
  }

  function leavePage( )
  {
     // try {
          window.location.href = "http://www.example.com";
     // } catch( e ) { }
  }

HTML:

<body>
 <a href="#" onclick="leavePage(); return false;">Leave this page</a> 
</body>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...