最近,我正在开发一个项目功能,当用户决定关闭或刷新页面时,该功能会显示一个确认框。
我已经做到了:
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?
答案 0 :(得分:0)
代表@denysséguert:
简短的答案是你做不到。
onbeforeunload事件最初是由Microsoft引入的,以允许标准的确认对话框。现在,大多数浏览器都以原始形式支持它,并且在大多数情况下,允许执行简短的非交互式功能(例如,您可以将状态记录在localStorage中)。但是,正如跨浏览器的jQuery API中所述,这是不可靠的:
卸载事件的确切处理因版本而异 版本的浏览器。例如,某些版本的Firefox会触发 链接时发生事件,但关闭窗口时不发生。在 实际使用中,应在所有受支持的浏览器上测试行为, 并与专有的beforeunload事件进行对比。
由于当用户要求结束页面(进而是脚本)时,与任务执行相关的潜在安全问题很多,因此在(并且如果)进行认真的标准化工作以确保精确结束之前,这可能是不可靠的在onbeforeunload回调中到底可以做什么?
对于可预见的未来,建议不要依赖onbeforeunload,而是使用其他方案,例如恒定的背景保存或较大的“保存”按钮。