簡體   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