对于较新的 Google chrome 浏览器,即 17+ 版(不确定其他浏览器是否也这样做),默认情况下似乎具有预渲染功能(请参阅http://support.google.com/chrome/bin/answer. py?hl=en&answer=1385029 ) 已启用,这意味着即使在用户完成在地址栏中输入 url 之前,页面已被加载!
我想这对于主要是静态内容的页面来说是一个很好的技巧,它可以欺骗用户通过更早地有效加载来加快页面加载速度。但是,这对于在加载时触发某些操作/逻辑的页面是有问题的。
例如,考虑一个websocket
与服务器建立连接并在加载后立即发送消息的页面。当用户输入此页面的 url 时,很可能已经建立连接并发送了 msg,但是当用户在地址栏中实际按下“enter”时,websocket
连接丢失并重新建立,并且 msg重新发送,可能是因为 websocket 将实际页面加载视为刷新。现在,如果您有一些响应断开连接或接收某些消息的逻辑,这可能会导致服务器端出现混乱的行为。另一个例子可能是重定向,在这种情况下可能会发生双重重定向,因为页面被有效地加载了两次。
有没有什么有效的方法来处理这个浏览器功能,除了关闭它是开发人员无法控制的?一些JavaScript
技巧?