在页面卸载上显示confim弹出窗口[DUPLICATED]

时间:2018-07-18 09:33:15

标签: javascript jquery

最近,我正在开发一个项目功能,当用户决定关闭或刷新页面时,该功能会显示一个确认框。

我已经做到了:

 window.onbeforeunload = function (e) {
        return "Are you sure you want leave?";
    };

但是它不能在ios chrome / safari浏览器上运行,并且只能在chrome android浏览器上检测到刷新。

我进行了一些研究,并在MDN网络文档中找到了

  

为防止不必要的弹出窗口,某些浏览器不显示提示   除非页面已经被创建,否则在beforeunload事件处理程序中创建   与...互动有些根本不显示它们。对于列表   特定的浏览器,请参见Browser_compatibility部分。

任何人都知道如何处理此问题。 谢谢。

更新: 经过进一步研究,我发现我的问题已经在这里回答了 How to make a cross-browser on-window-unload request?

1 个答案:

答案 0 :(得分:0)

代表@denysséguert:

简短的答案是你做不到。

onbeforeunload事件最初是由Microsoft引入的,以允许标准的确认对话框。现在,大多数浏览器都以原始形式支持它,并且在大多数情况下,允许执行简短的非交互式功能(例如,您可以将状态记录在localStorage中)。但是,正如跨浏览器的jQuery API中所述,这是不可靠的:

  

卸载事件的确切处理因版本而异   版本的浏览器。例如,某些版本的Firefox会触发   链接时发生事件,但关闭窗口时不发生。在   实际使用中,应在所有受支持的浏览器上测试行为,   并与专有的beforeunload事件进行对比。

由于当用户要求结束页面(进而是脚本)时,与任务执行相关的潜在安全问题很多,因此在(并且如果)进行认真的标准化工作以确保精确结束之前,这可能是不可靠的在onbeforeunload回调中到底可以做什么?

对于可预见的未来,建议不要依赖onbeforeunload,而是使用其他方案,例如恒定的背景保存或较大的“保存”按钮。