@grant 指令并通过页面检测用户脚本

@grant directive and detecting a user script by a page

我的问题有两个方面。首先,有人可以解释一下在 Tampermonkey 中使用 @grant none 的优缺点吗?其次,我应该使用哪些 @grant 值来防止网页检测到脚本?

@grant

If @grant is followed by 'none' the sandbox is disabled and the script will run directly at the page context. In this mode no GM_* function but the GM_info property will be available.

如果脚本不需要任何 @grant,即脚本是普通的 JavaScript,没有任何 GM API,您可以使用 @grant none。 Tampermonkey 然后将脚本注入 page 上下文(与网页的 JavaScript 相同的上下文)。

通常用户脚本被注入到 content 上下文中,该上下文与 page 上下文分开。

如果用户脚本被注入到page上下文中,那么页面会更容易找到它。同样,如果用户脚本注入 content 上下文但使用 unsafeWindow 与网页脚本交互。

网页无法自动检测用户脚本,但可以检查脚本的结果。

例如...

  • 网页添加广告
  • userscript 移除广告
  • 网页检查广告是否还在

网页还可以查找用户脚本可能添加的特定全局变量(如果用户脚本将全局变量添加到 page 上下文)。