无法加载资源:net :: ERR_NETWORK_IO_SUSPENDED

The*_*lob 41 javascript browser

我在Stack Overflow和Google中搜索了标题中的特定错误消息,但我没有找到它(在JavaScript编码的上下文中,而不是浏览器设置).在我的网站上,每10秒调用五个函数.这些函数执行以下操作:

  1. 检查用户的收件箱中是否有新电子邮件
  2. 检查用户的帐户是否有新的即时消息
  3. 等等

但是,如果用户登录但是不活动(不使用鼠标或按任何键)大约15分钟,当我使用Chrome"检查元素"时收到以下错误消息:

Failed to load resource: net::ERR_NETWORK_IO_SUSPENDED // (x 5)
Uncaught Type Error: Cannot read property 'combinedfiletimeinput' of undefined //one of my previously defined form values is now not defined
Run Code Online (Sandbox Code Playgroud)

此时,用户的新电子邮件计数,新IM计数等变为空白(之前它们是整数).用户所要做的就是刷新页面或转到另一个页面重新连接,所以这不是什么大不了的事.

我的黑客解决方案是使用JavaScript计时器在15分钟内没有任何以下事件时自动注销用户:

  1. 鼠标单击
  2. 鼠标移动
  3. 按键

有没有办法防止出现"无法加载资源"错误?

更新:这似乎发生在用户的设备在登录时休眠/休眠时...当用户重启设备时.这是在Chrome的Inspect Element,Firebug等上可以看到错误消息的时候.

更新10/02/2014:我现在已将五个setTimeout函数压缩为一个大的setTimeout函数.此外,已删除在名为"combinedfiletimeinput"的输入中保存修改时间的表单,现在我以不同方式处理文件修改时间.

以下是Chrome开发者工具日志的屏幕截图,显示错误.我添加了"mysite"来代替我的网站名称和"filename"来代替实际的文件名.我还打开了外部JavaScript文件的名称,剩下的就是.js(对不起,但我只是要小心:))我剪掉了一些截图,所以文字足够大了阅读.

Chrome屏幕截图

正如您在屏幕截图中看到的,请求处理前三个请求的OK.然后我"睡觉"我的设备,然后重新打开我的设备.接下来的两个请求就是错误(红色).在前两个错误之后,请求开始正常处理(带有黑色文本的行,带有红色文本的行之后).控制台清楚地显示错误消息.

Ada*_*her 19

只是总结我在社区问题下的评论.

经过一些测试后,似乎必须为每次调用设置Ajax超时.没有超时,NET ::错误(如ERR_NETWORK_IO_SUSPENDED,ERR_INTERNET_DISCONNECTED等)将导致Ajax停止执行,并且在计算机唤醒后不会恢复.

对于jQuery:

$.ajax({
   url: yourURL,
   timeout: 4000
});
Run Code Online (Sandbox Code Playgroud)

对于XMLHttpRequest(XHR):

 xhr.timeout = 4000;
Run Code Online (Sandbox Code Playgroud)

此外,脚本需要一个异常处理程序来捕获连接错误,这样您的JavaScript代码就不会因意外的行为/值而崩溃.

即使使用超时和执行处理程序,您的应用程序也会抛出NET ::错误,但它们不会损害您的应用程序; 你可以把它们想象成通知.


ptr*_*trk 1

尽管我认为捕获异常应该是一般的解决方法,但您可以尝试触发假(鼠标、滚动、键盘)事件,看看这是否会阻止 Chrome 进入“空闲”状态。

Stack Overflow 问题如何使用 JavaScript 模拟鼠标点击?可能会有帮助。

  • 强制系统保持清醒通常是不好的做法。在笔记本电脑和平板电脑等电池供电的设备上,它会不必要地消耗电池。尽管网页模糊了界限,但它也违反了大多数操作系统应用程序指南。 (4认同)