我可以对JavaScript施加时间限制(例如,使用iframe)吗?

时间:2013-06-21 15:04:14

标签: javascript iframe

我想运行一些带有时间限制的外部JavaScript,因此如果它需要超过N秒,它将被停止。

某些浏览器,例如Firefox已经通过一个对话框执行此操作,询问您是否要允许脚本继续运行。但是,我正在寻找更多:

  • 我想设置自己的时间限制,而不是使用浏览器的默认设置(例如,我认为Chrome比Firefox的长得多)。
  • 我希望能够在每个脚本的基础上执行此操作,而不是每页。一个页面可能包含我想以这种方式限制的多个脚本(因此我的想法是使用<iframe>元素)。

我认为如果只有一个我可以附加到<iframe>的属性会非常方便 - 例如js-time-limit="5000"之类的东西(我只是把它做了) - 但我没有能够找到类似的东西。

这可能吗?要在浏览器中对JavaScript执行设置可配置的时间限制吗?

2 个答案:

答案 0 :(得分:1)

如果iframe正在进行计算工作而不需要访问DOM,那么请使用网络工作者:https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/Using_web_workers

这里还有一个可以为你抽象出难点的图书馆! http://adambom.github.io/parallel.js

重要部分:

  

专用Web Workers为Web内容提供了一种在后台线程中运行脚本的简单方法。

  

如果需要立即终止正在运行的worker,可以通过调用worker的terminate()方法来实现:myWorker.terminate();

浏览器兼容性

Chrome  Firefox (Gecko)  Internet Explorer  Opera  Safari (WebKit)
   3        3.5 (1.9.1)          10         10.60        4

答案 1 :(得分:0)

对于后人:我最初的目标是允许网站用户提交JS代码并在后台运行它并设置时间限制,以便例如无限循环不会对CPU造成严重破坏。

我使用方法Lemming.js创建了一个名为Joe suggested的库。你这样使用它:

var lemming = new Lemming('code to eval');

lemming.onTimeout(function() {
  alert('Timed out!');
});

lemming.onResult(function(result) {
  alert('Result: ' + result);
});

lemming.run({ timeout: 5000 });

您可以check out the GitHub repo了解更多详情。