3

如何识别浏览器的关闭按钮被点击了?

4

8 回答 8

5

JavaScript Event Reference中,最接近的匹配似乎是 OnUnload 事件。但是,这也会使导航远离页面(因此,如果用户实际单击链接,您不希望函数运行。)

不能保证服务器会收到浏览器窗口关闭的消息。例如,涉及创建小弹出窗口的旧方法将被大多数现代浏览器阻止。使用 AJAX 可能有效,但浏览器窗口可能会在尝试连接之前关闭。

于 2008-11-04T06:59:44.823 回答
3

这会:

$(window).unload( function () { alert("Bye now!"); } );

帮你 ?

虽然它在 jQuery 中。

不过,您应该检查Demoli 提供的链接,它包含有关此特定方法(及其缺点)的更多信息。

编辑:添加链接。

于 2008-11-04T06:58:47.320 回答
2

浏览器没有关闭事件,因此您无法真正判断用户何时关闭浏览器,此线程中有一些潜在的解决方法

如果您让我们知道您要达到的目标,则可能有另一种方法

于 2008-11-04T06:55:03.553 回答
1

你应该使用onbeforeunload,而不是onunload。IE 7(可能还有其他浏览器)在触发事件时并不是 100% 可靠的unload,但它似乎总是触发beforeunload事件。

例如:

window.onbeforeunload=function(){}

或者,如果您使用的是prototype.js:

Event.observe(window, 'beforeunload', function(){});
于 2008-11-04T16:07:24.140 回答
1

这是一个黑客,但它似乎对我有用。它也可能是特定于 IE 的。我为仅 IE 环境编写代码。

<body onunload="if(self.screenTop>9000){unloadFunction();}">

编辑添加我的 unloadFunction 会打开一个弹出窗口,该窗口会终止用户的会话。您无法在本身关闭的页面上执行任何操作。因为已经关门了!;)

于 2008-11-04T20:06:55.763 回答
0

您可以设置一个 ajax 调用,每隔几秒到几分钟定期轮询您的服务器(取决于您想要的时间精度)并跟踪服务器端的最后一次命中时间。不完全准确(例如,网络问题可能导致误报),但根据您的要求可能是一种选择。

于 2008-11-04T07:51:35.280 回答
0

当用户离开页面(卸载?)时通常会触发一个事件 - 这可能是特定于浏览器的。

还有一个属性,window.closed,它是在其关联的窗口关闭后在窗口对象上设置的。这通常在您引用弹出窗口时使用。

我不确定 unload 事件是否会在设置“关闭”属性之前或之后触发 - 您必须进行试验。

您可能无法区分关闭的窗口和已转到另一个站点的浏览器。

于 2008-11-04T07:00:12.433 回答
0

我同意northsouthwhat,但请注意,onbeforeunload 可能并非在您可能想要使用它的所有浏览器中都受支持。

于 2008-11-04T17:57:14.417 回答