IE elerts
function foo.bar(){} false
在除了IE的瀏覽器中運行JScript,在解析JScriptFunction 的FunctionBindingList時會如期地拋出SyntaxError(語法錯誤)。這是意料之中的,因為它是一個語法擴展。
書簽
javascript:(function() {var ro=RuntimeObject(),r=[],i=0,p;for(p in ro){r[i++]=p;}alert('leaked:\n'+r.join('\n'));})();
JScript語法擴展
在較早的”查找由FunctionBindingList創(chuàng)建的標識符”的例子中提到過JScript擴展--JScriptFunction。這個名字不是一個破綻,它是JScript語言的擴展,JScriptFunction 如下:
JScriptFunction : function FunctionBindingList ( FormalParameterListopt ) { FunctionBody } RuntimeObject(filterString): The filterString Parameter RuntimeObject
方法接受一個可選的過濾字符去匹配標識符。遺憾的是,filterString 不能轉(zhuǎn)換成正則表達式,而是用可選的leftWild和rightWild來進行子匹配默認為”*“。
這意味著filterString = “a*” 將匹配標識符a和a1,而不是ba 。
結(jié)論
拋開文檔的bug和缺點來說,RuntimeObject 提供了一個有用的替代方案來解決JScript中枚舉全局屬性的問題。RuntimeObject的優(yōu)點在于它僅包括用戶定義的屬性,全局的window屬性除外。
前面提到的書簽提供了一個簡便的方法去查看一個頁面中不經(jīng)意間創(chuàng)建的全局屬性(它也表明這個站點也不是全局對象保持清潔的光輝典范)。
RuntimeObject的其它應用
跨瀏覽器標識泄露書簽
相對于IE中標識泄露檢測,寫一個跨瀏覽器標識泄露檢測是下一個邏輯步驟。
自動標識符泄露檢測
意外的全局標識符檢測應該是自動匹配的。
YUI Test 的單元測試框架為TEST_CASE_BEGIN_EVENT 和TEST_CASE_COMPLETE_EVENT 提供了鉤子。這些事件用來檢測RuntimeObject,并在程序代碼運行期間捕捉泄露的標識符。
在TEST_CASE_BEGIN_EVENT 中檢測RuntimeObject 并存儲結(jié)果。在TEST_CASE_COMPLETE_EVENT中再次檢測RuntimeObject 并與TEST_CASE_BEGIN_EVENT中存儲的結(jié)果比較。接下來,對于每一個出現(xiàn)在TEST_CASE_COMPLETE_EVENT中而并沒有出現(xiàn)在TEST_CASE_BEGIN_EVENT中的每屬性,一個全局標識符已被泄露,一個測試案例的警告就會記錄下來。
英文原文:http://dhtmlkitchen.com/?category=/Browsers/&date=2010/04/11/&entry=Detecting-Global-Pollution-with-the-JScript-RuntimeObject
譯文:http://www.denisdeng.com/?p=1043
本文鏈接:http://www.95time.cn/tech/web/2010/7959.asp
出處:
責任編輯:bluehearts
上一頁 用JScript RuntimeObject檢測全局污染 [2] 下一頁
◎進入論壇網(wǎng)頁制作、WEB標準化版塊參加討論,我還想發(fā)表評論。
|