为什么全局变量突然可用于 Greasemonkey 和 Tampermonkey 脚本?
Why are global variables suddenly available for Greasemonkey and Tampermonkey scripts?
最近在写用户脚本时发现页面上下文中的变量可用。
console.log(window)
在 Tampermonkey 和 Greasemonkey 中都没有导致错误。
我很困惑。全局变量不应该只能通过 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
的方式现在是 a leading cause of many, many problems。
最近在写用户脚本时发现页面上下文中的变量可用。
console.log(window)
在 Tampermonkey 和 Greasemonkey 中都没有导致错误。
我很困惑。全局变量不应该只能通过 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
的方式现在是 a leading cause of many, many problems。