2010-04-22 100 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字節。