如何识别浏览器的关闭按钮被点击了?
8 回答
在JavaScript Event Reference中,最接近的匹配似乎是 OnUnload 事件。但是,这也会使导航远离页面(因此,如果用户实际单击链接,您不希望函数运行。)
不能保证服务器会收到浏览器窗口关闭的消息。例如,涉及创建小弹出窗口的旧方法将被大多数现代浏览器阻止。使用 AJAX 可能有效,但浏览器窗口可能会在尝试连接之前关闭。
这会:
$(window).unload( function () { alert("Bye now!"); } );
帮你 ?
虽然它在 jQuery 中。
不过,您应该检查Demoli 提供的链接,它包含有关此特定方法(及其缺点)的更多信息。
编辑:添加链接。
浏览器没有关闭事件,因此您无法真正判断用户何时关闭浏览器,此线程中有一些潜在的解决方法
如果您让我们知道您要达到的目标,则可能有另一种方法
你应该使用onbeforeunload
,而不是onunload
。IE 7(可能还有其他浏览器)在触发事件时并不是 100% 可靠的unload
,但它似乎总是触发beforeunload
事件。
例如:
window.onbeforeunload=function(){}
或者,如果您使用的是prototype.js:
Event.observe(window, 'beforeunload', function(){});
这是一个黑客,但它似乎对我有用。它也可能是特定于 IE 的。我为仅 IE 环境编写代码。
<body onunload="if(self.screenTop>9000){unloadFunction();}">
编辑添加我的 unloadFunction 会打开一个弹出窗口,该窗口会终止用户的会话。您无法在本身关闭的页面上执行任何操作。因为已经关门了!;)
您可以设置一个 ajax 调用,每隔几秒到几分钟定期轮询您的服务器(取决于您想要的时间精度)并跟踪服务器端的最后一次命中时间。不完全准确(例如,网络问题可能导致误报),但根据您的要求可能是一种选择。
当用户离开页面(卸载?)时通常会触发一个事件 - 这可能是特定于浏览器的。
还有一个属性,window.closed,它是在其关联的窗口关闭后在窗口对象上设置的。这通常在您引用弹出窗口时使用。
我不确定 unload 事件是否会在设置“关闭”属性之前或之后触发 - 您必须进行试验。
您可能无法区分关闭的窗口和已转到另一个站点的浏览器。
我同意northsouthwhat,但请注意,onbeforeunload 可能并非在您可能想要使用它的所有浏览器中都受支持。