gpt4 book ai didi

javascript - 如何在 safari 中使用 'pagehide' 事件来防止卸载?

转载 作者:行者123 更新时间:2023-12-05 00:25:03 26 4
gpt4 key购买 nike

我有一个页面,我在某些用户操作后发送 ajax 请求。在用户离开页面之前等待所有这些请求完成,这一点很重要。为此,我在 ajax 请求之前和之后设置了一些状态变量,并在 beforeunload 中观察它。事件处理程序:

componentDidMount() {
window.addEventListener('beforeunload', lockUnloadAction.bind(this));
}
...
export function lockUnloadAction(event) {
let returnText = undefined;
if (this.state.isRequestProgress) {
// send to GA
....
returnText = 'На странице еще выполняется отправка сообщения. ' +
'Вы уверены, что хотите уйти со страницы?';
event.returnValue = returnText;
}

return returnText;
}
但在 Safari beforeunload不管用。根据文档 https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW5我应该使用 pagehide .
但是在此事件处理程序中不允许任何确认、警报(我在控制台'window.alert is not allowed while unloading page'中得到错误)。我也试过使用 preventDefault()stopPropogation然后警告或确认,我也尝试返回一些文本值并设置 event.returnValue喜欢 beforeunload事件处理程序。没有任何帮助。
componentDidMount() {
window.addEventListener('pagehide', function(event){
event.stopPropagation();
event.preventDefault();
confirm('someText');
event.returnValue = 'someText';
return 'someText'
);
}
是否有任何其他方法可以防止在 Safari 和移动 Safari 中确认卸载页面,或者我应该使用 pagehide通过另一种方式?

最佳答案

根据 these MDN specs , pagehide 事件不可取消

关于javascript - 如何在 safari 中使用 'pagehide' 事件来防止卸载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49428275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com