我有一個編輯器,用戶可以輸入他們的javascript並顯示他們的輸出。但我想要一個安全條件來阻止他們意外地創建一個無限循環。問題是我真的不想解析代碼並尋找任何循環,然後添加額外的條件。我期望的是預構建的功能,可以在一定量的內存後自行取消,以避免瀏覽器崩潰。但我不確定如何做到這一點。如何通過內存阻止javascript中的無限循環?
回答
JS BIN運行一個名爲loop-protect
的開源項目,你可以使用它,它很容易實現。
整潔。我不知道環路保護。不幸的是,它不處理遞歸。 –
是的,有[Esprima](http://esprima.org/)JavaScript解析器的幫助,這是可能的。 –
對於無限遞歸情況似乎不那麼重要,因爲腳本在發生遞歸錯誤後會失敗,因此它不會崩潰或凍結瀏覽器。 –
沒有通用的方法在JavaScript本身中執行此操作因爲瀏覽器中的JavaScript是單線程的*如果「惡意」腳本從不產生,那麼您的代碼將無法運行 - 殺死用戶的腳本。
在某些情況下,運行時可以爲您做到這一點 - Internet Explorer臭名昭着its obnoxious error messages,但我不知道任何平臺不可知的方式來請求這種環境保護。
*忽略網絡工作者,因爲消息處理主「線程」的發生反正這是不相關的討論。
的乾淨的解決方案可能是解釋的JavaScript。 。這是http://repl.it是怎麼做的((http://repl.it/help)),還有就是當你做無限循環非常好的反饋var f=function(){f();};f();
產生這樣的輸出:RangeError: Maximum call stack size exceeded
JS-解釋似乎解釋與橡果JS的JavaScript和你可能會能增加檢測無限循環:https://github.com/NeilFraser/JS-Interpreter
另一種選擇是使用網絡工作者(https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/basic_usage):
移動用戶腳本轉換爲使用在服務器端的東西網絡工作者,你也可以使用這個MDN示例中的數據URI:https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Advanced_concepts_and_examples。但是,由於安全限制(http://caniuse.com/#feat=datauri),數據URI在IE中不起作用。
覆蓋
console.log
,alert
或其他任何用戶需要,以獲得,以便將它們轉換成Web工作的消息從他們的腳本反饋。在預先設定的時間內殺死每個Web工作者。
- 1. 如何阻止無限循環?
- 2. 如何阻止這個無限循環
- 3. 如何阻止Javascript中的無限循環?
- 4. javascript停止無限循環
- 5. 如何阻止主頁中的htaccess無限循環重定向
- 6. 無阻塞無限循環
- 7. 無限循環無法找出如何阻止它java
- 8. 爲什麼Javascript內部循環會阻止外部循環的斷開(即無限循環)?
- 9. 如何阻止外部的無限循環?
- 10. 如何在javascript中的無限循環
- 11. 如何阻止JButton執行無限循環
- 12. 如何阻止線程繼續執行無限循環
- 13. 如何防止循環中的布爾值無限循環?
- 14. 如何阻止此循環?
- 15. 停止javascript無限循環onmouseout?
- 16. JavaScript無限循環?
- 17. 阻止循環
- 18. 如何在Java中無限循環地停止循環?
- 19. 如何停止無限while循環
- 20. 如何停止無限循環?
- 21. 如何終止無限循環
- 22. 如何防止節點無限循環?
- 23. QThread:如何停止無限循環
- 24. 如何終止無限循環(線程)
- 25. php web無限循環 - 如何停止
- 26. .htaccess無限循環如何停止
- 27. IP如何防止無限循環?
- 28. Haskell中無限循環做阻斷
- 29. 的Javascript while循環無限循環
- 30. Javascript無限循環無
我認爲這可以幫助你:http://www.nczonline.net/blog/2009/05/19/javascript-stack-overflow-error/ 它解釋hapen當你創造無限的循環以及如何處理這個(通過瀏覽器) –
@MrJedi這幾乎是無關緊要的。 'while(true){}'不會引發你可以處理的錯誤。 – meagar