浏览器挂起/挂起检测
Browser suspend / hang detection
是否有办法检测浏览器被挂起/冻结/挂起(例如:通过操作系统锁屏)?
我有一个问题与ajax计时器机制。按钮上的单击向启动时钟的控制器发送ajax请求。在浏览器打开的同时,另一个脚本(通过"setInterval")使时钟运行。当按钮再次被点击时,ajax请求停止计时器并杀死setInterval。
然而,我需要检测,浏览器被冻结(javascript停止),如果是这样,使一个ajax请求更新定时器。
我想知道如果它实际上是可能的javascript和现代浏览器。是吗?
编辑:我想我第一次没有解释清楚。无限循环是必须的。这些元素是计时器(秒表)。我不想检测脚本是否因为js错误或浏览器过载而冻结。
我想检测浏览器(js)是否因为操作系统锁屏,操作系统睡眠或其他原因而停止。
不保证跨浏览器兼容性或任何类型的标准遵从;这有点粗俗,要看具体情况,真的。
(function() {
// milliseconds
var lastTime = (new Date).getTime()
, acceptableDelta = 500
, tick = 1000
, hung = false;
function hangman() {
var now = (new Date).getTime();
if(now - lastTime > (tick + acceptableDelta)) {
hung = true;
} else if(hung) {
hung = false;
console.warn('Possible browser hangup detected.');
}
lastTime = now;
}
setInterval(hangman, tick);
}());
这背后的概念是,如果浏览器能够为用户停止失控脚本,但保留页面的其余部分,计时器将检测到这种差异,并在控制台中警告用户。
jsFiddle的演示在这里,公平的警告,请不要点击按钮,除非你真的想开始一个无限循环。
最后,您可能需要重新考虑为什么要这样做,并在设计层面上与任何可能导致浏览器挂起的来源作斗争。避免没有暂停、无限循环、处理器密集型操作等的繁重和顺序工作负载。使用异步回调分隔任务,并在代码中放置策略延迟,以给浏览器和用户计算机一些喘息的空间。
不可能。唯一与此相近的方法是侦听窗口关闭,并在代码的最后一刻执行一些代码。
window.onbeforeunload = function(event) {
//do something, ask if the user really wants to exit the page, cancel ajax or whatever it is you need to achieve.
}
Ajax请求是用javascript代码完成的。如果任何javascript导致浏览器挂起/冻结,这意味着可能存在不允许移动到特定javascript代码之前的错误。一旦它冻结了浏览器,浏览器就会尝试检测错误(而不是脚本,因为脚本本身被冻结了)。它在软件中(浏览器软件,无论是IE/FF/chrome)。
最好是将javascript代码封装在
中try
{
}
catch
{
}
捕获错误。
- JavaScript执行暂时挂起页面
- 是定义的操作系统睡眠/挂起期间setTimeout的行为
- Chrome浏览器“;挂起”;同时在循环中执行AJAX请求
- fullcalendar在删除导致浏览器挂起的多个事件时速度较慢
- 应用将图表转换为图像的jqplot代码时Chrome挂起
- 如何在不使用Internet Explorer的情况下从未挂起的HTML文件执行程序
- MongoDB collection.find()查询挂起
- 使用子字符串方法时应用程序挂起的原因
- 如何在AngularJS中取消挂起的请求
- 从node.js应用程序调用Mongoose Model.save()时挂起
- Chrome,Safari在从本地存储读取时挂起,而Firefox很好
- IE 10 挂起 XMLHttpRequest 6 分钟,然后响应请求(使用 AngularJS 实现 CRSF)
- 挂起 JavaScript 键关闭事件
- HERE 映射 JS API v3 集群提供程序挂起,添加许多数据点
- Ajax 调用挂起在 jQuery 中
- writeln img src将数据提交到外部系统-Firefox和IE挂起
- 在jQuery中,.state()如何确定一个承诺是挂起的、已解决的还是被拒绝的
- 为什么JavaScript中没有挂起回调函数
- AngularJS指令,用于在离开/关闭页面之前检测挂起的更改
- 浏览器挂起/挂起检测