“pageshow”当按下Safari浏览器上“后退”按钮* iPad的\没有收到”“pagesho

2019-05-13 12:18发布

我有以下处理:

        $(window).bind('pageshow', function() { alert("back to page"); });

当我导航离开该页面(按一个链接)并返回页面(按“返回”按钮), 警报()不叫(新iPad 2的iOS 5.1)。

什么我做错了吗? 任何其他事件中,我需要绑定?

PS:有趣的是,导航离开该页面时pagehide被正确接收。

Answer 1:

您可以检查persisted的财产pageshow事件。 它被设置为在初始页面加载错误。 当页面从缓存中加载它被设置为true。

window.onpageshow = function(event) {
    if (event.persisted) {
        alert("back to page");
    }
};

出于某种原因,jQuery的没有在事件此属性。 您可以从原始的事件,虽然找到它。

$(window).bind("pageshow", function(event) {
    if (event.originalEvent.persisted) {
      alert("back to page");
    }
};


Answer 2:

这可能是一个缓存的问题。 当您通过“返回”按钮返回到该页面,该页面正在从缓存中提取的(行为是依赖于浏览器)。 正因为如此,你的JS将不会触发,因为该页面在缓存中已经呈现并重新运行您的JS可能不利于布局和这样的。

您应该能够通过调整你的缓存头在你的回应,或使用浏览器技巧屈指可数克服这一点。

下面是对这个问题的一些链接:

  • 是否有点击后退按钮时,一个跨浏览器onload事件?
  • 在Firefox历史旅游回来后,JavaScript就无法运行

编辑

这些都是从上面的链接拉:

  • history.navigationMode = 'compatible';
  • <body onunload=""><!-- This does the trick -->
  • “和Firefox 1.5+和Safari(其中包含更正了BUG 28758)的一些未来版本支持特殊事件称为pageshowpagehide 。”
  • 使用jQuery的$(document).ready(handler)
  • window.onunload = function(){};


Answer 3:

你在做什么有约束力的返回值alert("back to page")作为回调。 这是行不通的。 您需要绑定一个函数:

$(window).bind('pageshow', function() { alert("back to page"); });


文章来源: 'pageshow' is not received when pressing “back” button on Safari on *IPad\"