我正在尝试从textarea运行javascript代码。 在开头我虽然使用了eval,但根据这个question,但根据答案,eval并不是实现这一目标的最佳方式。
后来我找到了这个question,它讲述了我可以使用的许多替代库。 我尝试了一些,但文档不太清楚,或者项目是死亡。
我找到的唯一“解决方案”之一是js.js lib。 但是没有文档(或者我没有从示例中得到它如何工作)解释如何将我从textarea传递给lib的代码。
你知道这样做的lib吗? webworker是否有效?我有什么想法可以实现这个目标吗?
由于
答案 0 :(得分:1)
我认为如果您确实想要运行用户输入的任意Javascript,并且您已经确定了安全隐患,那么eval
是一种合理的方法。如果用户输入的代码从未保存,那么它可能没问题,但如果textarea中的文本可能已被其他用户输入,则为no。在这种情况下,这可能会有所帮助:How can I sandbox untrusted user-submitted JavaScript content?。
以下是使用Caja以字符串形式执行某些Javascript的示例:
<html>
<head>
<title>Caja host page</title>
<script type="text/javascript"
src="//caja.appspot.com/caja.js">
</script>
</head>
<body>
<h1>Caja host page</h1>
<div id="guest"></div>
<script type="text/javascript">
caja.initialize({
cajaServer: 'https://caja.appspot.com/',
debug: true
});
caja.load(document.getElementById('guest'), undefined, function(frame) {
// This URL is actually ignored and yet the caja API requires
// a URL to be passed and for it not to be null or empty (!)
var url = 'http://example.com/example.js';
// A string that will be run in the context of the virtual document
// in the div with id "guest" identified above.
var javascriptString = 'document.write("hello")';
// Execute the code.
frame.code(url, 'application/javascript', javascriptString).api({}).run();
});
</script>
</body>
</html>