iOS Safari Mobile 不会仅触发一次页面显示
iOS Safari Mobile doesn't trigger pageshow firing only once
iOS Safari 在以下情况下似乎不会触发 pageshow 事件。
假设我有 3 页
- 页面 A:(在 pageshow 事件中有一些代码)
- B页
- C页
用户从 A -> B
开始导航。按下后退按钮。 (pageshow 触发良好)
然后用户导航到另一个页面,可能是页面 B 或页面 C。然后再次按下后退按钮。 (页面显示不触发)
相反,如果用户再次最小化和最大化 window 或切换到另一个 window 并返回(通过在 iPhone 上按中间按钮),将触发 pageshow 事件再次.
在 Android
上似乎一切正常
window.onpageshow = function(e) {
alert('hello');
}
还有人遇到过吗?我在这件事上花了几个小时,想不出解决方法。
如有任何帮助,我们将不胜感激。
尝试使用:
window.onpageshow = function(event) {
if (!event.persisted) {
alert("hello");
}
};
Persisted 在初始页面加载时为 false,因此您可以对照它进行检查,如果为 false,则这是您的第一个页面加载。
技巧:这对我有用
var myCustomEvent = (navigator.userAgent.match('iPhone') != null) ? 'popstate' : 'pageshow';
$(window).on(myCustomEvent, function(e) {
...
}
由于某些原因 popstate
每次当页面状态在 iOS 中发生变化但在 Android 中没有变化时触发。
popstate
活动似乎不再有效,至少对我而言。我在我的页面上制定了一些第三方脚本来打破这一点,但无法确定是哪一个。我想出了这个技巧:
addEventListener('pageshow', () => {
history.replaceState({}, document.title, window.location.pathname);
// called on initial load and first back
});
addEventListener('popstate', () => {
// called on all back events
});
iOS Safari 在以下情况下似乎不会触发 pageshow 事件。
假设我有 3 页
- 页面 A:(在 pageshow 事件中有一些代码)
- B页
- C页
用户从 A -> B
开始导航。按下后退按钮。 (pageshow 触发良好)
然后用户导航到另一个页面,可能是页面 B 或页面 C。然后再次按下后退按钮。 (页面显示不触发)
相反,如果用户再次最小化和最大化 window 或切换到另一个 window 并返回(通过在 iPhone 上按中间按钮),将触发 pageshow 事件再次.
在 Android
上似乎一切正常window.onpageshow = function(e) {
alert('hello');
}
还有人遇到过吗?我在这件事上花了几个小时,想不出解决方法。
如有任何帮助,我们将不胜感激。
尝试使用:
window.onpageshow = function(event) {
if (!event.persisted) {
alert("hello");
}
};
Persisted 在初始页面加载时为 false,因此您可以对照它进行检查,如果为 false,则这是您的第一个页面加载。
技巧:这对我有用
var myCustomEvent = (navigator.userAgent.match('iPhone') != null) ? 'popstate' : 'pageshow';
$(window).on(myCustomEvent, function(e) {
...
}
由于某些原因 popstate
每次当页面状态在 iOS 中发生变化但在 Android 中没有变化时触发。
popstate
活动似乎不再有效,至少对我而言。我在我的页面上制定了一些第三方脚本来打破这一点,但无法确定是哪一个。我想出了这个技巧:
addEventListener('pageshow', () => {
history.replaceState({}, document.title, window.location.pathname);
// called on initial load and first back
});
addEventListener('popstate', () => {
// called on all back events
});