针对更新的Google Chrome浏览器,即版本17+(不确定其他浏览器是否也这样),默认启用了预渲染功能(参见http://support.google.com/chrome/bin/answer.py?hl=en&answer=1385029),这意味着页面在用户完成在地址栏中输入URL之前就被加载了!我猜这对于大多数静态内容的页面来说是个好技巧,通过有效地提前加载页面来欺骗用户使页面更快地加载。然而,对于触发某些操作/逻辑的页面来说,这是有问题的。
例如,考虑一个建立
例如,考虑一个建立
websocket
连接并在页面加载时发送消息的页面。当用户输入此页面的URL时,连接可能已经建立并且消息已被发送,但是当用户在地址栏中实际按下“回车”键时,websocket
连接会丢失并重新建立,消息将被重新发送,这可能是因为websocket将实际页面加载视为刷新。现在,如果您有一些响应断开连接或接收某些消息的逻辑,这可能会导致服务器端出现混乱的行为。另一个例子可能是重定向,在这种情况下,页面实际上会加载两次,可能会发生双重重定向。
除了关闭浏览器功能(这是开发人员无法控制的事情)之外,是否有任何有效的方法来处理它?一些JavaScript
技巧吗?
alert("Hello!")
,那么当我正在输入时(在按回车键之前),它会弹出一个警示框吗? - bellpeace