如何从textarea运行javascript并防止收到警告

时间:2014-08-03 13:52:17

标签: javascript jquery html

我正在尝试从textarea运行javascript代码。 在开头我虽然使用了eval,但根据这个question,但根据答案,eval并不是实现这一目标的最佳方式。

后来我找到了这个question,它讲述了我可以使用的许多替代库。 我尝试了一些,但文档不太清楚,或者项目是死亡。

我找到的唯一“解决方案”之一是js.js lib。 但是没有文档(或者我没有从示例中得到它如何工作)解释如何将我从textarea传递给lib的代码。

你知道这样做的lib吗? webworker是否有效?我有什么想法可以实现这个目标吗?

由于

1 个答案:

答案 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>