情况如下:
如果我在第1页,我现在点击第1页的链接导航到第2页。在加载第2页之前我正在逃避,所以我仍然留在第1页。
此时我想跟踪该事件。
是否有任何javascript事件,以便我可以跟踪上述情况。
更多信息:
为了避免对“page-2”的并发请求,当用户点击第1页的链接时,我将重定向到第2页并禁用链接(以避免对“page-2”的多个请求)。当我们点击Esc并中止加载第2页时,我需要在第1页再次启用该链接。
答案 0 :(得分:3)
我尝试使用此代码:
<html>
<head>
<script>
document.onkeypress = KeyPressed;
function KeyPressed(e)
{
if (!e) e = window.event; //IE Compatibility
alert(e.keyCode);
}
</script>
</head>
<body>
<a href="http://stackoverflow.com">Stack Overflow</a>
</body>
</html>
它会检测您在页面上按下的任何键。一旦你点击SO链接并点击逃脱,没有任何反应。浏览器已经收到来自SO服务器的响应并开始处理它,此页面已经“离开”,尽管您在浏览器的状态栏中看到“等待http://stackoverflow.com”时出现。
答案 1 :(得分:1)
您处理此事件的想法是完全错误的。需要阻止按钮才能使用户无法进行双重发布数据。但是,在点击链接后立即发送请求(!)。
因此,如果您单击链接一次,请停止页面,然后单击第二次 - 它将提交两次,这不是预期的。
答案 2 :(得分:0)
页面卸载时会触发两个事件。
window.onUnload
window.onBeforeUnload
您可以使用这些事件来取消页面的卸载,但在此之后,该页面将被视为已完成。
您可以做的是让页面在转到新页面之前等待5秒左右:
例如:
window.onunload = (function() {
var time = new Date();
var cancel = false;
window.onkeypress = function (e) {
if ((e || window.event).keyCode == 27) cancel = true;
};
while(time > new Date() - 5000) {
if (cancel) return false;
}
});
事实上,由于您占用了JS脚本的所有处理时间,因此可能会导致某些浏览器挂起。即:在while块中。
你可以通过执行阻塞函数调用来避免这种情况,这不是那么过程密集,就像受网络延迟约束的那样。例如:XMLHttpRequest()等。我不认为排队的调用如setTimeout()会在这里工作,因为它们不会阻塞。
答案 3 :(得分:0)
由于<a href>
标记告诉浏览器移动到另一个页面,因此可以决定它是否仍然会运行您的脚本。如果我是它,我就不会听。
如果你想覆盖它,我想你应该告诉浏览器不来监听那个特定的onClick
事件,然后放回一个回调来加载目标页面。背景。这可确保您的页面仍处于活动状态。目标页面加载后(通过您的脚本),您可以请求浏览器使用收到的内容更新自己。
这就是理论。我不知道DOM是否允许你覆盖加载页面的内容,但我想它确实如此。