use*_*564 5 javascript safari javascript-events reactjs
我有一个页面,在执行某些用户操作后,我会在其中发送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;
}
Run Code Online (Sandbox Code Playgroud)
但是在Safari中,beforeunload无法正常工作。根据文档https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW5,我应该使用'pagehide'。
但是任何确认,警报都不允许在此事件处理程序内进行(我在控制台“ window.alert不允许在卸载页面时出现错误”)。我也尝试使用preventDefault()或stopPropogation,然后发出警报或确认,我也尝试返回一些文本值并设置event.returnValue,例如“ beforeunload”事件处理程序。没有任何帮助。
componentDidMount() {
window.addEventListener('pagehide', function(event){
event.stopPropagation();
event.preventDefault();
confirm('someText');
event.returnValue = 'someText';
return 'someText'
);
}
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以防止在safari和移动safari中卸载带有确认的页面,或者我应该以另一种方式使用“ pagehide”?
| 归档时间: |
|
| 查看次数: |
586 次 |
| 最近记录: |