暂停所有javascript

时间:2012-08-23 06:22:04

标签: javascript

我一直致力于为我未来的项目编写代码库。我一直在努力的功能之一是暂停功能。到目前为止,对于报告脚本运行的错误,即使在暂停时间长达10秒,我也没有任何问题。这主要是为了让恶意用户忙碌,当你设置很长时间时效果很好。我想知道是否有任何我应该注意的错误? 这是代码......

pause = function(a) {
    var b = new Date().getTime();
    e = false;
    function wait() {
    d=10;
    for(i=0;i<d;i++) {
        d++;
        var c = new Date().getTime();
        if(c-b>=a) {
            e = true;
            break;
        }
        if(d>1000000) {
            break;
        }
    }
}
wait();
if(e==false) {
    pause(a-(new Date().getTime()-b));
}};

3 个答案:

答案 0 :(得分:4)

你永远想在Javascript中做这类事情。正如您所注意到的,浏览器会抱怨您的脚本耗时太长。此外,这将消耗比必要的能量更多的能量,这对于电池容量有限的移动设备非常重要。

相反,请使用标准setTimeout()函数以便稍后运行代码。

答案 1 :(得分:0)

Javascript已经有办法做到这一点。使用setTimeout()并在继续操作时将其传递给匿名函数。第二个参数是以毫秒为单位的延迟。

示例:

setTimeout(function(){alert('hello');},2000);

答案 2 :(得分:0)

正如我在迄今为止的评论中所说的,尝试在javascript中运行半无限循环绝不是一个好主意。

以下是一些需要注意的问题:

  1. 如果您在一段时间后通过完成执行的javascript线程没有返回浏览器事件循环,浏览器将停止并提示用户在该浏览器窗口中终止javascript。
  2. 您的代码使用一堆未声明的变量,这使得它们成为隐式全局变量。由于它们具有通用名称,因此很容易干扰其他代码。
  3. 由于javascript是单线程的,当您的循环正在运行时,该窗口的其他浏览器事件无法运行,导致浏览器窗口基本上被冻结。用户会认为它是挂起的。患者用户可能会等待更长时间才能看到它是否完成不耐烦的用户会杀死浏览器窗口。
  4. 基本上,您要做的是对用户浏览器的拒绝服务攻击。您可能不喜欢他们对您的网页所做的事情,但攻击他们似乎不合适。更好的方法是以适合浏览器的方式阻止访问您的页面,而不是以浏览器攻击的方式。

    建议:

    如果您真正尝试做的只是在某些情况下使您的页面无用(您仍然没有解释为什么要尝试这样做或者什么条件会触发您希望这样做),那么它可能会最好不要试图杀死浏览器,使页面无用或信息丰富。你可以通过以下方式做到:

    1. 只是隐藏DOM中的所有内容,使窗口变为空白。
    2. 删除所有DOM元素,使窗口变为空白。
    3. 在整个窗口上放置一个透明图层,这样就不会有任何输入事件进入页面元素,但视觉效果会保留在那里。您可以在该窗口中添加消息。
    4. 使用适当的消息替换页面内容。