javascript - ios javascript pagehide 和卸载不能正常工作

标签 javascript ios safari

我想在用户关闭选项卡或刷新 ios 页面时显示一个弹出窗口,以防止他丢失数据。我已经看到 unload 已被弃用,我必须使用 pagehide 事件,但似乎两者都不适用于 safari 甚至 chrome。

我的代码是:

window.addEventListener("pagehide", function (evt) {
    return confirm("Vous allez perdre toutes vos modifications");
}, false);

问题是即使我点击取消按钮,页面也会刷新,如果我关闭选项卡,弹出窗口不会出现。

我也为 Chrome 移动版尝试了此代码(桌面工作正常),但两者都不适用于他的浏览器

window.addEventListener("beforeunload", function (e) {
    if (closeWindow) {
        var message = 'Toutes vos modifications seront perdues';
        if (typeof evt == 'undefined') {
            evt = window.event;
        }
        if (evt) {
            evt.returnValue = message;
        }
        return message;
    }
}, false);

最佳答案

我的猜测是 unload 触发太迟,无法弹出消息。有时您可以使用 beforeunload 来解决这个问题,但它没有在 iOS Safari 中实现。 :( 也许您可以通过在 unload 上向服务器发送 AJAX 请求来做一些棘手的事情(参见:How to detect unsaved data in form when user leaves the page?)。

我不确定它是否有帮助,但您也可以考虑通过将用户数据保存到 localstorage 或将其发送到您的服务器。

关于javascript - ios javascript pagehide 和卸载不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27530440/

相关文章:

javascript - for循环完成后获取数组值

jquery - $.post 调用在 Safari 中未发生

javascript - 如何在 Bootstrap 中使用多列而不是从第 1 列开始?

ios - SIGSEGV 错误 IOS - UITableView 上的 UiGestureRecognizer

ios - 如何通过我的应用程序 IOS 检查哪些应用程序处于事件状态

ios - 自更新到 XCode 9.3 后,我无法存档我的项目

html - 在 Safari 中预览代码? [Mac 用户]

css - iOS CSS 不透明度 + 可见性过渡

javascript - 在 javascript 中出现次数最多

javascript - 寻找黑客在原型(prototype)被密封时填充对象