如何检测浏览器是否正在加载新页面

时间:2012-02-22 11:21:23

标签: javascript web page-lifecycle

我有一个带有“安全”代码的Web应用程序,如果服务器(Socket.IO)连接静音超过5秒(通常是客户站点防火墙/破坏代理问题),则会导致页面重新加载。

一旦新页面开始加载,Socket.IO连接就会停止,但安全代码看不到这一点。导航到慢速页面会导致安全代码触发并跳回上一页。

我需要能够告诉(在此代码之前导致重新加载)浏览器当前是否正在等待加载新(慢)页面。

除了在每个链接上放置一个jQuery点击事件(不能通过地址栏捕获导航)之外,还有什么方法可以做到这一点?

谢谢,

克里斯。

2 个答案:

答案 0 :(得分:13)

监控window.onbeforeunload可以解决问题。在用户开始导航后立即触发。

尝试在任何页面上的Chrome控制台中输入此内容,然后点击任意链接:

window.onbeforeunload = function () { console.log("oh noes"); }

答案 1 :(得分:2)

我的建议:修复代码,以便在套接字断开连接时不重新加载页面。问题解决了。

修改
我想你可以在页面重新加载时简单地设置一个变量,例如isReloading。您还需要监视onbeforeunload,并检查首先发生的事情:断开连接或卸载事件。如果首先发生断开连接,则表示您已断开连接。触发isReloading标志并重新加载。在onbeforeunload中检查是否设置了标志。反转检查慢速页面是否正在加载的概念:检查是否正在重新加载。