Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 浏览器挂起/挂起检测_Javascript_Jquery_Html - Fatal编程技术网

Javascript 浏览器挂起/挂起检测

Javascript 浏览器挂起/挂起检测,javascript,jquery,html,Javascript,Jquery,Html,是否有任何方法可以检测到浏览器被挂起/冻结/挂起(例如:通过操作系统锁定屏幕) 我对ajax定时器机制有一个问题。单击按钮将ajax请求发送给启动时钟的控制器。在浏览器打开的同时,另一个脚本(通过“setInterval”)使时钟运行。再次单击按钮时,ajax请求会停止计时器并终止setInterval 但是,我需要检测浏览器是否已冻结(javascript已停止),如果是,请发出ajax请求以更新计时器 我想知道javascript和现代浏览器是否真的能做到这一点。是吗 编辑: 我想我第一次没

是否有任何方法可以检测到浏览器被挂起/冻结/挂起(例如:通过操作系统锁定屏幕)

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

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

我想知道javascript和现代浏览器是否真的能做到这一点。是吗

编辑: 我想我第一次没解释清楚。 无限循环是必须的。这些元素是计时器(秒表)。我不想检测脚本是否因为js错误或浏览器过载而冻结


我想检测浏览器(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请求?您真的认为浏览器冻结时,有一个小角落允许您运行代码吗?听起来像是一辆没油的车,但你想再多开一点吗?朱哈娜:你不明白,或者我没把它描述清楚。我不想在浏览器处于睡眠状态时打电话。我想检测,浏览器处于休眠状态,然后打电话(当它恢复工作时)。