The*_*lob 41 javascript browser
我在Stack Overflow和Google中搜索了标题中的特定错误消息,但我没有找到它(在JavaScript编码的上下文中,而不是浏览器设置).在我的网站上,每10秒调用五个函数.这些函数执行以下操作:
但是,如果用户登录但是不活动(不使用鼠标或按任何键)大约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分钟内没有任何以下事件时自动注销用户:
有没有办法防止出现"无法加载资源"错误?
更新:这似乎发生在用户的设备在登录时休眠/休眠时...当用户重启设备时.这是在Chrome的Inspect Element,Firebug等上可以看到错误消息的时候.
更新10/02/2014:我现在已将五个setTimeout函数压缩为一个大的setTimeout函数.此外,已删除在名为"combinedfiletimeinput"的输入中保存修改时间的表单,现在我以不同方式处理文件修改时间.
以下是Chrome开发者工具日志的屏幕截图,显示错误.我添加了"mysite"来代替我的网站名称和"filename"来代替实际的文件名.我还打开了外部JavaScript文件的名称,剩下的就是.js(对不起,但我只是要小心:))我剪掉了一些截图,所以文字足够大了阅读.
正如您在屏幕截图中看到的,请求处理前三个请求的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 ::错误,但它们不会损害您的应用程序; 你可以把它们想象成通知.
尽管我认为捕获异常应该是一般的解决方法,但您可以尝试触发假(鼠标、滚动、键盘)事件,看看这是否会阻止 Chrome 进入“空闲”状态。
Stack Overflow 问题如何使用 JavaScript 模拟鼠标点击?可能会有帮助。