2015-12-10 1 views
1

Раньше у меня есть код JavaScript, в котором появится диалоговое окно &, выполняющее перенаправление при закрытии браузера.

<html> 
<head> 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 

<script> 
    $(document).ready(function() { 
     var url  = 'http://www.yahoo.com'; 
     var message = 'go to yahoo?'; 

     $('a').on('click', function() { $(window).unbind("beforeunload"); }); 
     $('form').on('submit', function() { $(window).unbind("beforeunload"); }); 

     $(window).on("beforeunload", function() { 
      $(window).unbind("beforeunload"); 
      setTimeout(function() { 
       window.location = url; 
      }, 0); 

      return message; 
     }); 
    }); 
</script> 
</head> 
<body> 
hello world 
</body> 
</html> 

Я тестировал в хромированном состоянии и работает должным образом.

Теперь я планирую использовать zepto.js вместо jquery.js по определенной причине.

Изменяя

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 

в

<script src="zepto.min.js"></script> 

Я понимаю, что код больше не работает. Ошибка JavaScript отсутствует. Но функция события beforeunload не запускается никогда.

Подозреваю $(window).on ведет себя по-разному среди JQuery и зепто

Могу ли я знать, как я могу получить $(window).on("beforeunload", function() { работы для зепто?

+1

У вас все еще есть 'jQuery' в вашем коде, поэтому я ожидаю, что ошибка в' jQuery' не определена в консоли, но вы ее не видите, потому что перенаправление происходит. –

ответ

1

У меня нет времени прямо сейчас, чтобы провести глубокий анализ кода zepto и jquery.

Проблема в том, как zepto обрабатывает возвращаемые значения обратного вызова события.

mdn: beforeunload говорит, что он должен быть использован таким образом:

e.returnValue = confirmationMessage;  // Gecko and Trident 
return confirmationMessage;    // Gecko and WebKit 

Это делается автоматически с помощью JQuery, но не зепто.

Установка returnValue вручную, кажется, работает хорошо в Chromium и Firefox:

$(window).on("beforeunload", function(e) { 
    e.returnValue = message; 
    return message; 
}); 

Но все еще может быть проблемы кросс-браузер. Так что либо вы используете родной addEventListener вместо zepto, либо вам нужно выполнить кросс-браузерное тестирование.

+0

Спасибо. Я тестировал браузер Edge и браузер Chrome. Ваше предлагаемое решение отлично подходит для меня. –

+0

@CheokYanCheng Я собирался предложить открыть вопрос, но, как я вижу, вы уже это сделали;) –

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

  • Нет связанных вопросов^_^