我有一个带有“安全”代码的Web应用程序,如果服务器(Socket.IO)连接静音超过5秒(通常是客户站点防火墙/破坏代理问题),则会导致页面重新加载。
一旦新页面开始加载,Socket.IO连接就会停止,但安全代码看不到这一点。导航到慢速页面会导致安全代码触发并跳回上一页。
我需要能够告诉(在此代码之前导致重新加载)浏览器当前是否正在等待加载新(慢)页面。
除了在每个链接上放置一个jQuery点击事件(不能通过地址栏捕获导航)之外,还有什么方法可以做到这一点?
谢谢,
克里斯。
答案 0 :(得分:13)
监控window.onbeforeunload
可以解决问题。在用户开始导航后立即触发。
尝试在任何页面上的Chrome控制台中输入此内容,然后点击任意链接:
window.onbeforeunload = function () { console.log("oh noes"); }
答案 1 :(得分:2)
我的建议:修复代码,以便在套接字断开连接时不重新加载页面。问题解决了。
修改强>
我想你可以在页面重新加载时简单地设置一个变量,例如isReloading
。您还需要监视onbeforeunload
,并检查首先发生的事情:断开连接或卸载事件。如果首先发生断开连接,则表示您已断开连接。触发isReloading标志并重新加载。在onbeforeunload中检查是否设置了标志。反转检查慢速页面是否正在加载的概念:检查是否正在重新加载。