我打算使用AJAX加載JS文件,然後評估它們來執行代碼。但我擔心使用eval。剛看到的jQuery如何實現getScript加入方法我通過它的源代碼去,發現這個:在使用eval執行動態JavaScript之前,jQuery如何清理動態加載的JavaScript文件?
rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/;
jQuery.globalEval((elem.text || elem.textContent || elem.innerHTML || "")
.replace(rcleanScript, "/*$0*/"));
globalEval是評估全球(窗口)上下文中的腳本和照顧或跨瀏覽器兼容的方法。但我不理解替換部分。通過它的名字,它看起來像rcleanScript被用來清理腳本,以便執行它是安全的。但我不明白它是如何工作的。
有人可以解釋這一點嗎?
編輯:我知道它是用/ $ /替換一些CDATA部分。但是,這是如何保證安全?從本質上講,如何在不替換CDATA部分的情況下執行腳本不安全?
但我只看到CDATA在HTML文件中使用。 JavaScript文件是否也包含CDATA部分?如果不是,爲什麼要更換? – Cracker 2011-06-06 23:17:15
@Cracker您引用的代碼來自'evalScript'方法,該方法在將帶有JS內容的'script'元素附加到頁面時使用。那麼清理是必要的。所以你可以做'$('').html(yourCode).appendTo(document.body)',jQuery會爲你排序所有這些。 – lonesomeday 2011-06-06 23:18:57
哦..我的壞。那我選錯了東西! :(我想知道jQuery如何使用getScript動態地加載腳本,它是否只是評估腳本執行它,我感到困惑並從源頭中選擇了錯誤的代碼,我應該問另一個問題嗎? – Cracker 2011-06-06 23:23:09