2013-07-08 31 views
0

爲了測試目的,我想列出在頁面上設置的所有全局變量。最初,我需要運行此代碼的唯一瀏覽器是PhantomJS(基於webkit)。但如果可能的話,我可能需要在IE和Firefox後面運行它。Javascript:列出在頁面上設置的所有全局變量? Webkit主要是

我至今是:

windowKnowAttributes = ['history','locationbar'....] // this will get huge. 
for(v in window){ 
    if(window.hasOwnProperty(v)) //AND 
    if(windowKnowAttributes.indexOf(v) === -1) 
     console.log(v) 
} 
+2

http://remysharp.com/2007/11/01/detect-global-variables/ –

+0

@ san.chez有趣。而不是通過在狀態爲「髒」之前運行來生成初始列表,它將在執行時刻創建一個新的iframe以獲得比較清晰的狀態。聰明。但它仍然是一樣的想法,事實上... – gcb

回答

0

您可以使用Array.filter()你知道屬性陣列比較當前設置窗口對象的屬性的......也許像這樣:

var windowKnownProperties = ['history','locationbar'....] 
var windowAllProperties = []; 
for(v in window){ 
    windowAllProperties.push(v); 
} 

var unknownGlobals = windowAllProperties.filter(function(el, idx, arr) { 
    return (windowKnownProperties.indexOf(el) === -1); 
}); 

您可能想要將某些東西包裝在一個函數中,以便這裏使用的變量不會在全局空間中自行結束。您也可以在運行任何其他腳本之前使用for...in循環生成windowKnownProperties,然後在加載頁面後再創建一個新的window屬性數組,並將其與Array.filter()方法進行比較。

+0

我認爲這是我的錯,這個問題寫得很糟糕......過濾陣列不是問題。更感興趣的是從存儲第一個快照的知道一種更安全的方法來從DOM窗口中排除DOM元素。但我認爲所有的解決方案都是這樣做的,所以可能沒有辦法解決這個問題。 – gcb