2011-05-21 14 views
3

有沒有辦法阻止函數使用全局變量,如document,window,navigator和其他聲明的全局函數?如何將JavaScript函數鎖定到本地作用域?我想阻止它使用全局變量

EDIT1:如果我能選擇只限於這將是巨大的,因爲我想使功能使用爲例Math對象,它的功能,它的全局對象...

+0

誰在調用函數?我已經理解了這個問題,但不是這種情況! – R1234 2011-05-21 18:28:47

+0

任何人都可以定義函數(通過字符串提交),我會調用'eval(fn); fn(某事)'其中fn是陌生人定義的函數......我想使它安全(如果可能的話)。 – 2011-05-21 18:31:10

+0

將它作爲字符串在循環中傳遞並返回整齊的部分(包含您需要的所有函數)。這將需要一些努力來製作模板,但是可能的。 – R1234 2011-05-21 18:42:04

回答

5

有沒有辦法阻止函數使用全局變量,如文檔,窗口,導航器和其他聲明的全局函數?

沒有,除非...

的唯一方式這個任務可能是,如果職能的詞法範圍可以改變 - 那就是,源被修改以某種方式,例如如下所示包裝它。

試想:

;(function() { 
    var window = "Hello" 

    // original content 
    function foo() { 
     alert(window) 
    } 
    foo() 

})() 

使用這種方式常常在圖書館創建私有命名空間的同時,在這種情況下,原始來源也可以和設計考慮到這一點。我已經在document之前對改變了這個本地版本的jQuery。

雖然with可能看起來很有希望,但重要的是要意識到它只是一個詞法結構,並且不會引入動態變量。

快樂編碼。

0

您可以要求您的用戶限制自己的代碼爲ADsafe。來自網站:

ADsafe可以安全地將訪客代碼(如第三方腳本廣告或小部件)放在網頁上。 ADsafe定義了一個足夠強大的JavaScript子集,允許客人代碼執行有價值的交互,同時防止惡意或意外損壞或入侵。 ADsafe子集可以通過JSLint等工具進行機械驗證,因此不需要人工檢查來檢查客人代碼的安全性。 ADsafe子集還實施了良好的編碼實踐,增加了客人代碼正確運行的可能性。

如果您勾選右邊的框中,JSLint將驗證碼爲AdSafe兼容,因此安全在您的網站上執行。

相關問題