【发布时间】:2014-02-14 04:42:26
【问题描述】:
Apple 文档在此处列出了可用的 iOS 浏览器事件: https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html
“pagehide”和“pageshow”事件似乎在 safari 上运行良好,但在 chrome 上它只适用于页面加载和卸载。它不起作用:
按下主页按钮,即将 Chrome 发送到后台
切换标签
下面是一个小的 Javascript sn-p,你可以用它来验证它:
<script type="text/javascript">
window.addEventListener("pageshow", function(evt){
alert('show');
}, false);
window.addEventListener("pagehide", function(evt){
alert('hide');
}, false);
</script>
我可以做些什么来检测 chrome 是否被发送到后台。一旦 chrome 回到前台,我需要清除一个 setTimeout 计时器。有什么解决方法吗?
【问题讨论】:
-
我认为您不了解“pageshow”和“pagehide”的含义。它们发生在 (a) 加载/卸载时,以及 (b) 更改页面是否是浏览器历史缓存中的当前页面(即当您导航离开或返回页面时)。它们与浏览器窗口是否可见无关。它们不适合在您的情况 (1) 和 (2) 中触发。
-
@Doin 即使我相信你的话(尽管文档链接会有所帮助),为什么行为与 Safari 不同? Safari 在我描述的场景中触发这些事件。其中至少有一个是越野车。
-
也许在 iOS 下最小化 Safari 实际上会将页面放入历史缓存并关闭它(就像导航一样)以节省 CPU 和/或 RAM)?无论如何,一些参考:html.spec.whatwg.org/multipage/indices.html#event-pagehidedeveloper.mozilla.org/en-US/docs/Web/Events/pagehideinkling.com/read/javascript-definitive-guide-david-flanagan-6th/…; ...并且您提供的苹果链接明确指出 pagehide/show 是(nonvisual)卸载/加载事件的首选替代品。
-
此页面详细描述了页面显示/隐藏事件背后的基本原理:developer.mozilla.org/en-US/docs/Using_Firefox_1.5_caching
-
这些浏览器中至少有一个显示不正确(与 Web 开发不一致)的行为,因此需要特殊处理。
标签: javascript ios google-chrome dom-events