gpt4 book ai didi

javascript - 浏览器暂停/挂起检测

转载 作者:搜寻专家 更新时间:2023-10-31 08:34:55 28 4
gpt4 key购买 nike

有什么方法可以检测到浏览器被挂起/卡住/挂起(例如:通过操作系统锁屏)?

我对 ajax 计时器机制有疑问。单击按钮向启动时钟的 Controller 发送 ajax 请求。同时浏览器打开,另一个脚本(通过“setInterval”)使时钟运行。再次单击按钮时,ajax 请求停止计时器并终止 setInterval。

但是,我需要检测浏览器是否已卡住(javascript 已停止),如果是,则发出 ajax 请求以更新计时器。

我想知道它是否真的可以通过 javascript 和现代浏览器实现。是吗?

编辑:我觉得我第一次没有解释好。无限循环是必须的。这些元素是计时器(秒表)。而且我不想检测脚本是否由于 js 错误或浏览器过载而卡住。

我想检测浏览器 (js) 是否由于操作系统锁屏、操作系统 sleep 或其他原因而停止。

最佳答案

不保证跨浏览器兼容性或任何类型的标准合规性;这有点老套,而且要视情况而定,真的。

(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 here 的演示,公平警告,不要点击按钮,除非你真的想要一个无限循环开始。


最后,您可能想要重新考虑您最初为什么要这样做,并在设计级别与任何可能导致浏览器挂起的来源作斗争。避免没有暂停、无限循环、处理器密集型操作等的繁重和连续的工作负载。使用异步回调将您的任务间隔开来,并在您的代码中放置战略性延迟,以便为浏览器和用户的计算机留出一些喘息的空间。

关于javascript - 浏览器暂停/挂起检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14192758/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com