2010-04-22 117 views
4

JavaScript的评估是否有限制,如长度限制?Javascript评估限制

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

任何想法为什么?

+2

*请*不要这样做,将它存储在数据库中是好的,但为什么必须使用'eval'? – 2010-04-22 18:06:00

+1

这听起来像是数据库要么截断你的代码,要么有字符编码问题。你是否尝试过使用不同的“相同”分贝值的手动值? – Robusto 2010-04-22 18:07:24

+1

@Nick:我正在控制代码的输入,所以它非常安全。 否则,我正在考虑让db js代码被一个单独的文件吐出来,然后将这个文件作为一个js脚本加入。我估计eval会更有效吗? – R0b0tn1k 2010-04-22 18:16:59

回答

1

您可以创建一个JavaScript函数,动态创建一个脚本标记(createElement('script')并追加它到head-或bodytag)并将源代码指向您的应用。 src可以包含参数,像获取请求一样使用,例如:src="jsapp.aspx?script=myscript&includefunction=loadfn"无需评估。您甚至可以为新脚本标记定义一个onload处理程序。大量的网络文件。

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

+2

你所说的是真实的,但不是由于它是_stated_的问题的答案。 – 2010-06-14 12:28:17

+1

而且?假设我以这个问题的精神回答。 – KooiInc 2010-06-15 06:42:37

1

你不需要使用eval和它不完全是一件好事情使用。您可以将其打印到页面并运行。

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

  1. 不当使用eval打开了你的注入攻击代码
  2. 调试也更具挑战性(没有行号等)
  3. eval'd代码执行速度比较慢(无机会编译/缓存eval'd代码)
+2

你说的是真的,但不是对_stated_这个问题的回答。 – 2010-06-14 12:28:35

0

我也遇到过这个。正如其他人在这里所说 - 当你正在生成Javascript并希望在浏览器上执行它时,eval会派上用场。我的这种技术的用法是做一些小事情,比如一个简单的函数,当按下按钮时,这个函数只会回拨给服务器。根据具体情况,可能有两个功能或一个功能。我也用它来显示从数据库更改的信息。信息总是纯文本。所以没有注射攻击可以完成。

无论如何,我也碰到了Javascript EVAL语句的这个限制,在我看来,这是1024个字符的限制。当我读完这篇文章时,我开始变得奇怪,比如eval只是吐出原文。这是非常明显的,因为我在将所有内容发送到浏览器之前将所有东西都保留下来,这样我就可以在文本中添加单引号和双引号等内容,而不会导致eval出现任何问题(并且所有东西都可以帮助防止注入攻击。)

我也与在jQuery中使用getscript的人站在一边。它的工作原理与eval没有大小限制一样。您必须采取的唯一额外步骤是首先创建Javascript文件。

我希望这可以帮助和回答原来的海报的问题。这是我相信大小限制是1024字节。