iOS Safari Mobile不会触发pageshow只触发一次

在以下情况下,iOS Safari似乎不会触发pageshow事件。

可以说我有3页

  • 页面A :(在pageshow事件上有一些代码)
  • 页面B
  • 页面C

用户从A -> B导航。 按下后退button。 (pageshow触发正常)
用户然后导航到另一个页面可能是页面B或页面C.然后再次按下后退button。 (pageshow不会触发)

相反,如果用户再次最小化和最大化窗口或切换到另一个窗口并返回(通过按下iPhone上的中间button),则页面显示事件再次被触发。

一切似乎在Android上正常工作

 window.onpageshow = function(e) { alert('hello'); } 

有没有其他人面对呢? 我花了几个小时在这个东西,想不到一个解决方法。

任何帮助将不胜感激。

哈克:这是为我工作

 var myCustomEvent = (navigator.userAgent.match('iPhone') != null) ? 'popstate' : 'pageshow'; $(window).on(myCustomEvent, function(e) { ... } 

出于某种原因,当iOS中的页面状态发生变化时, popstate每次popstate触发,而Android中则不会。

尝试使用:

 window.onpageshow = function(event) { if (!event.persisted) { alert("hello"); } }; 

初始页面加载时,Persisted为false,因此您可以检查它,如果它是false,则是您的首页加载。

popstate事件似乎不再起作用,至less对我来说。 我在网页上制定了一些第三方脚本,但是无法确定哪一个脚本。 我想出了这个黑客:

 addEventListener('pageshow', () => { history.replaceState({}, document.title, window.location.pathname); // called on initial load and first back }); addEventListener('popstate', () => { // called on all back events });