javascript的eval是否有限制,比如lenght?
我正在尝试构建一个应用程序,您可以在其中存储JS代码,您可以稍后加载和评估以执行它,但我已达到限制。 首先,代码必须全部在一行中。任何多行语句都不会执行。 接下来,我达到了极限(我猜)。如果我手动执行代码,它可以工作,但是将相同的代码放在db中,通过ajax加载它,并尝试执行它,它就会失败。
任何想法为什么?
答案 0 :(得分:2)
您不需要使用eval,它不是一件好事。你可以将它打印到页面上然后运行。
Here is the accepted answer on why you should not use eval:
答案 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)。