Javascript 浏览器挂起/挂起检测
是否有任何方法可以检测到浏览器被挂起/冻结/挂起(例如:通过操作系统锁定屏幕) 我对ajax定时器机制有一个问题。单击按钮将ajax请求发送给启动时钟的控制器。在浏览器打开的同时,另一个脚本(通过“setInterval”)使时钟运行。再次单击按钮时,ajax请求会停止计时器并终止setInterval 但是,我需要检测浏览器是否已冻结(javascript已停止),如果是,请发出ajax请求以更新计时器 我想知道javascript和现代浏览器是否真的能做到这一点。是吗 编辑: 我想我第一次没解释清楚。 无限循环是必须的。这些元素是计时器(秒表)。我不想检测脚本是否因为js错误或浏览器过载而冻结Javascript 浏览器挂起/挂起检测,javascript,jquery,html,Javascript,Jquery,Html,是否有任何方法可以检测到浏览器被挂起/冻结/挂起(例如:通过操作系统锁定屏幕) 我对ajax定时器机制有一个问题。单击按钮将ajax请求发送给启动时钟的控制器。在浏览器打开的同时,另一个脚本(通过“setInterval”)使时钟运行。再次单击按钮时,ajax请求会停止计时器并终止setInterval 但是,我需要检测浏览器是否已冻结(javascript已停止),如果是,请发出ajax请求以更新计时器 我想知道javascript和现代浏览器是否真的能做到这一点。是吗 编辑: 我想我第一次没
我想检测浏览器(js)是否因为操作系统锁定屏幕、操作系统睡眠或其他原因而停止。Ajax请求是通过javascript代码完成的。如果任何javascript导致浏览器挂起/冻结,这意味着可能存在一个不允许在特定javascript代码之前移动的错误。一旦冻结浏览器,浏览器将尝试检测错误(而不是脚本,因为脚本本身已冻结)。它在软件中(浏览器软件可以是IE/FF/chrome) 最好是将javascript代码封装在
try
{
}
catch
{
}
捕捉错误 不可能。唯一一件远程接近这一点的事情是监听窗口关闭,并在代码中执行最后一段代码
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.
}
不保证跨浏览器兼容性或任何类型的标准符合性;这有点老套,要视情况而定,真的
(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);
}());
这背后的概念是,如果浏览器能够为用户停止失控的脚本,但页面的其余部分保持不变,计时器将检测到这种差异,并在控制台中警告用户
演示开始,公平警告,请不要单击按钮,除非您确实希望无限循环开始
最后,您可能需要重新思考为什么要这么做,并在设计级别与任何可能导致浏览器挂起的来源进行斗争。避免繁重且连续的工作负载,而不需要暂停、无限循环、处理器密集型操作等。使用异步回调来分隔任务,并在代码中设置策略性延迟,以允许浏览器和用户计算机有喘息的空间。浏览器页面挂起的问题是,通常是JavaScript无限循环或类似的原因导致挂起。发生这种情况时,您不能运行JS,因为它将等待挂起的JS完成。我认为如果您不使用无限循环使浏览器冻结会更好。如果浏览器冻结,您将如何发出ajax请求?您真的认为浏览器冻结时,有一个小角落允许您运行代码吗?听起来像是一辆没油的车,但你想再多开一点吗?朱哈娜:你不明白,或者我没把它描述清楚。我不想在浏览器处于睡眠状态时打电话。我想检测,浏览器处于休眠状态,然后打电话(当它恢复工作时)。