我有一个页面,我在一些用户操作后发送ajax请求。在用户使用页面之前等待所有这些请求完成非常重要。为此,我在ajax请求之前和之后设置了一些状态var,并在'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之前,无法正常工作。根据文档https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW5,我应该使用'pagehide'。
但是在此事件处理程序中不允许任何确认,警报(我在控制台中获取错误'window.alert在卸载页面时不允许')。我也试过使用preventDefault()或stopPropogation然后提醒或确认,我也尝试返回一些文本值,并为'beforeunload'事件处理程序设置event.returnValue。什么都没有帮助。
componentDidMount() {
window.addEventListener('pagehide', function(event){
event.stopPropagation();
event.preventDefault();
confirm('someText');
event.returnValue = 'someText';
return 'someText'
);
}
有没有其他方法可以防止在safari和移动游猎中确认卸载页面,或者我应该用另一种方式使用'pagehide'?