为什么全局变量突然可用于 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