我正在編寫一個腳本,我需要在不支持JSON.parse()的瀏覽器中解析JSON。我有嚴格的大小目標(總大小爲< 20 kb),所以我不能依賴像jQuery這樣的外部庫。腳本標記來解析JSON:它工作嗎?
通常的做法是使用eval(),但我擔心它不安全,因爲我無法控制JSON字符串(由外部源提供)。
我想出了主意,使用腳本標籤來創建我的對象:
var json='{"name":"Me","age":"30"}';
var scr=document.createElement("script");
scr.innerHTML="var obj="+json;
document.body.appendChild(scr);
這似乎是工作,這表現在這裏: http://jsfiddle.net/bz8f7/
我在這裏失去了一些東西?有沒有我的方法不能工作或不安全的情況?
注意:我知道這個方法創建了一個全局變量,對於我的用例我沒有問題。
爲什麼不只是使用eval?它實際上等於你想要做的事情。你的方法與eval完全一樣安全,這意味着:不安全 –
@JanusTroelsen由於在問題中解釋的原因(腳本注入的風險) – Christophe
使用'script'標記不會比'eval'更安全。在這兩種情況下,你都在執行給定的代碼。唯一不同的是你的腳本版本正在全局執行它,但你可以通過'Function'構造函數來實現它。仍然不安全,但阻止訪問局部變量。 –