Safari<正文加载>事件不会从后退按钮触发

发布于 2025-01-04 12:22:36 字数 121 浏览 0 评论 0原文

当通过后退按钮进入页面时,我似乎无法在 Safari 中触发 body onload="..." 事件。在 FF 和 IE 中运行良好。有 Javascript 或 jQuery 解决方案吗?

任何帮助表示赞赏。

I don't seem to be able to get the body onload="..." event to fire in Safari when the page is entered via the back button. It works fine in FF and IE. Is there a Javascript or jQuery solution?

Any help appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

终陌 2025-01-11 12:22:36

尝试:

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

对于 Opera 浏览器,请阅读以下内容:http:// samuli.hakoniemi.net/onload-issues-with-opera/

Try:

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

For Opera browser, read this: http://samuli.hakoniemi.net/onload-issues-with-opera/

手心的温暖 2025-01-11 12:22:36

这是众所周知的。 Safari 和许多其他浏览器会缓存该页面,当您导航回该页面时,它们只会恢复之前的状态。

以下是关于此主题的一篇很好的 MDN 文章(它是关于 FF 1.5 但也应该适用于其他浏览器): https://developer.mozilla.org/En/Using_Firefox_1.5_caching

尝试使用 @zvona 建议的 pageshow 事件。

This is well known. Safari and many other browser cache the page and when you navigate back to it, they just restore the previous state.

Here is a good MDN article about this topic (it's about FF 1.5 but should apply to other browsers as well): https://developer.mozilla.org/En/Using_Firefox_1.5_caching

Try the pageshow event like @zvona suggested.

也只是曾经 2025-01-11 12:22:36

如果 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>

if the onload event is not fired,you should set the cache-control.

<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">

or add a tag in the body:

<iframe style=”height:0px;width:0px;visibility:hidden” src=”about:blank”>
this frame prevents back forward cache
</iframe>
国产ˉ祖宗 2025-01-11 12:22:36

这是唯一对我有用的东西:

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

window.onpageshow = function(event) {
  if (event.persisted) {
      window.location.reload(); 
  }
};

This was the only thing that worked for me:

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

window.onpageshow = function(event) {
  if (event.persisted) {
      window.location.reload(); 
  }
};
阳光的暖冬 2025-01-11 12:22:36

您可以尝试使用 jQuery 的 DOM 就绪事件,而不是使用 标记的 onload 属性,如下所示:

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

或者,简写版本:

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

Even如果这不能解决您的 Safari 问题,一般来说这仍然是一个很好的做法,因为它将您的 HTML 和 Javascript 分成易于识别的部分。

Rather than using the onload attribute of the <body> tag, you could instead try using the DOM ready event with jQuery, like so:

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

Or, the shorthand version:

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

Even if this doesn't solve your issue with Safari, it's still a good practice in general because it separates your HTML and Javascript into easily discernible parts.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文