38

我写了这段代码

function winUnload() {
    alert("Unload Window");
    MyMethod();
}

window.onunload = function() { winUnload(); }

此代码在 IE 和 Firefox 中运行良好。但是这段代码在 Chrome 中不起作用。这两个陈述alert("Unload Window");MyMethod();不起作用。

4

7 回答 7

60

在卸载事件中,有些操作在 chrome 中不起作用。警报或确认框就是这样的东西。

但是有什么可能(AFAIK):

  1. 打开弹出窗口(使用 window.open) - 但如果您的站点禁用了弹出窗口阻止程序,这将起作用
  2. 返回一个简单的字符串(在 beforeunload 事件中),它会触发一个确认框,询问用户是否想离开页面。

#2 的示例:

$(window).on('beforeunload', function() {
    return 'Your own message goes here...';
});

演示:http: //jsfiddle.net/PQz5k/

于 2012-02-17T09:27:57.480 回答
8

我知道这很旧,但我找到了使用 Chrome 进行卸载工作的方法

window.onbeforeunload = function () {
  myFunction();
};
于 2015-09-11T17:45:13.917 回答
6

阿明的回答非常有用,谢谢。#2 是在尝试设置适用于大多数浏览器的卸载事件时最重要的知识:您不能使用 alert() 或 confirm(),但返回字符串将生成确认模式。

但我发现,即使只返回一个字符串,我也会遇到一些特定于 Mootools 的跨浏览器问题(在本例中使用 1.4.5 版)。这个特定于 Mootools 的实现在 Firefox 中运行良好,但在 Chrome 或 Safari 中没有导致确认弹出窗口:

window.addEvent("beforeunload", function() {
    return "Are you sure you want to leave this page?";
});

因此,为了让我的 onbeforeonload 事件能够跨浏览器工作,我必须使用 JavaScript 原生调用:

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

不知道为什么会这样,或者它是否已在更高版本的 Mootools 中得到修复。

于 2015-06-22T16:44:45.607 回答
3

请尝试window.onbeforeunload使用window.onunloadchrome。您也可以尝试onbeforeunloadbody>可能在 chrome 中工作的标签调用。

但是,我们在 chrome 浏览器中的卸载功能确实存在问题。请检查

通过正文/窗口卸载事件调用时,location.href 在 chrome 中不起作用

于 2011-11-16T05:31:10.787 回答
3

您可以尝试将 pagehide 事件用于Chrome and Safari.

检查这些链接:

如何检测浏览器对 pageShow 和 pageHide 的支持?

http://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/

于 2012-03-28T14:39:29.050 回答
2

如果未触发 onload 事件,则不会触发 onunload 事件。不幸的是,onload 事件等待所有二进制内容(例如图像)加载,并且内联脚本在onload 事件触发之前运行。DOMContentLoaded在页面可见时触发,在 onload 之前触发。它现在是 HTML 5 的标准,您可以测试浏览器支持,但请注意这需要<!DOCTYPE html>(至少在 Chrome 中)。但是,我找不到用于卸载 DOM 的相应事件。而且这样的假设事件可能不起作用,因为某些浏览器可能会保留 DOM 以执行“恢复选项卡”功能。

到目前为止,我发现的唯一潜在解决方案是Page Visibility API,它似乎需要<!DOCTYPE html>.

于 2013-03-03T20:35:49.453 回答
2

这有效:

var unloadEvent = function (e) {
    var confirmationMessage = "Warning: Leaving this page will result in any unsaved data being lost. Are you sure you wish to continue?";
    (e || window.event).returnValue = confirmationMessage; //Gecko + IE
    return confirmationMessage; //Webkit, Safari, Chrome etc.
};
window.addEventListener("beforeunload", unloadEvent);
于 2016-03-07T05:04:50.373 回答