Javascript评估限制

时间:2010-04-22 18:01:47

标签: javascript

javascript的eval是否有限制,比如lenght?

我正在尝试构建一个应用程序,您可以在其中存储JS代码,您可以稍后加载和评估以执行它,但我已达到限制。 首先,代码必须全部在一行中。任何多行语句都不会执行。 接下来,我达到了极限(我猜)。如果我手动执行代码,它可以工作,但是将相同的代码放在db中,通过ajax加载它,并尝试执行它,它就会失败。

任何想法为什么?

3 个答案:

答案 0 :(得分:2)

您不需要使用eval,它不是一件好事。你可以将它打印到页面上然后运行。

Here is the accepted answer on why you should not use eval:

  1. 不当使用eval会打开您的注射攻击代码
  2. 调试可能更具挑战性(没有行号等)
  3. eval'd代码执行速度更慢(无法编译/缓存eval'd代码)

答案 1 :(得分:2)

我也遇到了这个问题。正如其他人在这里所说的那样 - 当您在运行中生成Javascript然后想要在浏览器上执行时,eval会派上用场。我对这种技术的用法是做一些简单的功能,只需按下一个按钮就可以回调服务器。根据具体情况,可能有两个功能或只有一个功能。我还使用它来显示从数据库更改的信息。信息始终只是纯文本。所以不能进行注射攻击。

无论如何,我也遇到了Javascript EVAL语句的这个限制,在我看来有1024个字符的限制。当我回过头来看,我开始得到像eval这样奇怪的东西,只是吐出原始文本。这是非常明显的,因为我在将所有内容发送到浏览器之前将其变为十六进制,因此我可以在文本中使用单引号和双引号,而不会导致eval出现任何问题。 (并且一切都有助于防止注入攻击。)

我也支持那个在jQuery中使用getscript的人。它的工作原理与eval一样,没有尺寸限制。您必须采取的唯一额外步骤是首先创建Javascript文件。

我希望这有助于回答原始海报的问题。那我认为大小限制是1024字节。

答案 2 :(得分:1)

您可以创建一个动态创建脚本标记的javascript函数(createElement('script')并将其附加到head-或bodytag)并将源指向您的应用。 src可以包含参数,像get请求一样使用,例如:src="jsapp.aspx?script=myscript&includefunction=loadfn"不需要eval。您甚至可以为新脚本标记定义onload处理程序。关于网络的大量文档。

你甚至不必使用XHR(AKA Ajax)。