Chrome V80功能将被弃用

3

从Chrome V80开始,一些事件(如beforeunload、unload等)将被废弃。我们该如何在JavaScript中进一步处理这些现有事件?

我的要求是当用户尝试刷新/重新加载页面(F5或ctrl + r)或浏览器返回按钮时,我需要发出警报,并在确认后重新加载或返回。这是在JSF2.2中实现的。

但这种行为不应影响其他浏览器的功能。

请问有人可以帮我吗?

1个回答

1
beforeunload事件仍然可用。正在更改的是在页面卸载期间执行同步XHR的能力。从长远来看,真正有害的是同步XHR,因为它会损害用户体验。您仍然可以利用beforeunloadGetting Rid of Synchronous XHRs特别提到了这一点:

注意:我们预计在Chrome 80中删除XMLHTTPRequest()同步使用页面卸载。该版本将于2020年初发布。

关于此特定更改还有Chrome Platform Status: Disallow sync XHR in page dismissal的信息。有关Chrome 80的更多信息,请参见Deprecations and removals in Chrome 80
现在Chrome禁止在页面被用户导航或关闭时,对XMLHTTPRequest()进行同步调用。这适用于beforeunload、unload、pagehide和visibilitychange事件。为确保页面卸载时数据被发送到服务器,我们建议使用sendBeacon()或Fetch keep-alive。目前,企业用户可以使用AllowSyncXHRInPageDismissal策略标志,而开发人员可以使用原始试验标志allow-sync-xhr-in-page-dismissal,在页面卸载期间允许同步XHR请求。这是一项临时的“opt-out”措施,我们预计将在Chrome 82中删除此标志。
需要注意的是,在页面卸载期间,弹出窗口也将被禁止:页面不再允许使用window.open()在卸载期间打开新页面。Chrome弹出窗口阻止程序已经禁止了这一点,但无论弹出窗口阻止程序是否启用,都将禁止这样做。

你知道如何/是否可以检查浏览器在页面卸载时允许/禁止XHR吗?由于sendBeacon在发送的总有效负载上受到限制,我们更喜欢仅在必要时使用它(即在不允许页面卸载XHR的浏览器上进行卸载时)。 我们刚刚意识到Safari IPAD也会卸载XHR,并且我们想知道是否有一种更普遍的方法来区分浏览器支持,而不是提供我们目前已知不支持它的浏览器列表。 - Michal Tsadok
你好,说实话,我不太确定。然而,一个好的做法是彻底避免在页面卸载时使用XHR,即使你有正当的理由。随着时间的推移,在很多情况下,它会损害用户体验,因此对它的支持会越来越少。 - Ismael Padilla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接