最近在編寫userscript時,我發現頁面上下文中的變量是可用的。
console.log(window)
在Tampermonkey和Greasemonkey中都沒有導致錯誤。爲什麼Greasemonkey和Tampermonkey腳本的全局變量突然可用?
我很困惑。全球變量是否只能通過unsafeWindow
訪問?
最近在編寫userscript時,我發現頁面上下文中的變量是可用的。
console.log(window)
在Tampermonkey和Greasemonkey中都沒有導致錯誤。爲什麼Greasemonkey和Tampermonkey腳本的全局變量突然可用?
我很困惑。全球變量是否只能通過unsafeWindow
訪問?
全局變量僅在@grant none
模式下可用。 As of Greasemonkey 2.0 (June 17, 2014), @grant none
mode became the default. Tampermonkey迅速效仿,保持兼容性。
如果你從來沒有使用過@grant
的習慣,這看起來像是一個最近的(意外的)變化。
現在你應該總是使用the @grant
directive,讓你意識到什麼模式的腳本在運行。
我也建議使用@grant GM_addStyle
,至少,除了那些比較罕見的情況下,當@grant none
爲宜。這避免了意想不到的衝突和副作用,並且最接近腳本用於工作的方式以及多少腳本引擎仍在工作。 (也就是說,這些腳本是更可靠和更跨平臺兼容。)
方式的Greasemonkey處理現在@grant
是manya leading cause,manyproblems。
是的我確實使用過'@grant none'。謝謝! – Juribiyan 2015-01-22 07:51:36
不客氣。 – 2015-01-22 08:38:50