繁体   English   中英

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

[英]Can I put impose a time limit on JavaScript (e.g., using an iframe)?

我想运行一个有时间限制的外部JavaScript,这样,如果花费的时间超过N秒,它将被停止。

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

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

我当时想,如果只有一个我可以附加到<iframe>的属性,这将非常方便-例如,类似js-time-limit="5000" (我刚刚做了),但是我一直没有能够找到类似的东西。

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

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

这也是一个可以为您提取困难部分的库! http://adambom.github.io/parallel.js

重要部分:

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

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

浏览器兼容性

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

为了后代:我的最初目标是允许网站的用户提交JS代码并在有时间限制的情况下在后台运行它,例如,无限循环不会对CPU造成破坏。

我使用Joe建议的方法创建了一个名为Lemming.js的库。 您可以这样使用它:

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

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

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

lemming.run({ timeout: 5000 });

您可以查看GitHub存储库以了解更多详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM