Сафарисобытие не срабатывает от кнопки назад - PullRequest
0 голосов
/ 10 февраля 2012

Кажется, я не могу получить событие body onload = "..." в Safari при входе на страницу с помощью кнопки "Назад".Он отлично работает в FF и IE.Есть ли решение Javascript или jQuery?

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

Ответы [ 5 ]

4 голосов
/ 10 февраля 2012

Попробуйте:

window.addEventListener("pageshow", function() {
  alert('page shown');
}, false);

Для Opera браузер, прочитайте это: http://samuli.hakoniemi.net/onload-issues-with-opera/

0 голосов
/ 22 мая 2019

Это было единственное, что сработало для меня:

http://jkoder.com/prevent-safariany-browser-loading-from-cache-when-back-button-is-clicked/

window.onpageshow = function(event) {
  if (event.persisted) {
      window.location.reload(); 
  }
};
0 голосов
/ 19 августа 2016

если событие onload не сработало, вы должны установить элемент управления кэшем.

<head>
<meta charset="utf-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">

или добавить тег в теле:

<iframe style=”height:0px;width:0px;visibility:hidden” src=”about:blank”>
this frame prevents back forward cache
</iframe>
0 голосов
/ 10 февраля 2012

Это хорошо известно.Safari и многие другие браузеры кэшируют страницу, и когда вы возвращаетесь к ней, они просто восстанавливают предыдущее состояние.

Вот хорошая статья MDN на эту тему (она относится к FF 1.5, но должна применяться к другим браузерам какхорошо): https://developer.mozilla.org/En/Using_Firefox_1.5_caching

Попробуйте событие pageshow, как предложено @zvona.

0 голосов
/ 10 февраля 2012

Вместо использования атрибута onload тега <body> вместо этого можно попробовать использовать событие готовности DOM с jQuery, например:

$(document).ready(function() {
    // your code here
});

Или сокращенную версию:

$(function() {
    // your code here
});

Даже если это не решит вашу проблему с Safari, в целом это хорошая практика, поскольку она разделяет ваш HTML и Javascript на легко различимые части.

...