Google Chrome连接到预装页面中的websocket

时间:2014-10-16 09:18:14

标签: javascript google-chrome websocket

在我的网站上,我有一个websocket连接,可以在x秒后访问者空转(不移动鼠标或按键)时向服务器发送信息。 一切都运行正常,但我在Windows 7上看到了谷歌浏览器(版本37和现在38 - 目前最新的稳定版本)的奇怪行为(也可能是其他操作系统)。

访问者在页面加载之前连接到websocket(在命中输入地址栏之前)。挖掘问题我发现了这个http://readwrite.com/2012/01/05/new_chrome_will_load_web_pages_before_you_hit_ente

  

如果您要在网站上输入您一直访问的地址和地址   自动完成后,Chrome将开始预渲染页面,减少   加载时间。

有关Google博客http://chrome.blogspot.ro/2011/08/instant-pages-on-google-chrome.html

上的Instant Pages的更多信息

一切都很棒,但有一个问题,谷歌加载页面后,我从我的网站名称输入第三个键,假设我想访问该网站,并建立到我的服务器的websocket连接,并且连接将可用即使我没有点击输入,即使我更改地址栏中的文字,也要持续几个小时。

另一个问题是当其他网站的名称与我的相似时。 例如,我想访问cooldogs.com。我去地址栏并开始输入酷,2个网站出现coolcats.com和cooldogs.com。因为coolcats.com是第一个网站,chrome会预先加载该网站,连接到websocket即使我想访问cooldogs.com 注意:coolcats.com和cooldogs.com是发明名称

所以我的问题是,只有在用户点击进入并加载网站后,才能使谷歌浏览器连接到websocket服务器。我对Google Chrome配置不感兴趣,因为我无法教会所有访问者更改设置。

这是错误还是设计流程?

1 个答案:

答案 0 :(得分:1)

如果页面可见,您可以尝试使用Visibility API启动WS连接。

  

页面可见性API可让您知道网页何时可见或在   焦点。使用选项卡式浏览,有一个合理的机会   给定的网页在后台,因此对用户不可见。

     

API通过提供来节省资源特别有用   开发人员有机会在不执行不必要的任务时   网页不可见。

     

用例

     

一些例子:

     
      
  • 网站有一个图片轮播,不应该前进到下一张幻灯片   除非用户正在查看该页面。
  •   
  • 显示a的应用程序   信息仪表板不想轮询服务器以获取更新   当页面不可见时。
  •   
  • 页面想要检测它何时出现   预渲染以便它可以保持页面浏览的准确计数。
  •   

这将是:

if(document.hidden === undefined || !document.hidden){
     // start WS connection
}
document.addEventListener("visibilityChange", function(){

     if( !webSocketStarted && (document.hidden !== undefined && !document.hidden){
        // start WS connection
     }

}, false);

阅读文档,试一试。