我想运行一些带有时间限制的外部JavaScript,因此如果它需要超过N秒,它将被停止。
某些浏览器,例如Firefox已经通过一个对话框执行此操作,询问您是否要允许脚本继续运行。但是,我正在寻找更多:
<iframe>
元素)。我认为如果只有一个我可以附加到<iframe>
的属性会非常方便 - 例如js-time-limit="5000"
之类的东西(我只是把它做了) - 但我没有能够找到类似的东西。
这可能吗?要在浏览器中对JavaScript执行设置可配置的时间限制吗?
答案 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了解更多详情。