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

时间:2018-03-22 12:05:48

标签: javascript reactjs javascript-events safari

我有一个页面,我在一些用户操作后发送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'?

0 个答案:

没有答案