@grant 指令并通过页面检测用户脚本
@grant directive and detecting a user script by a page
我的问题有两个方面。首先,有人可以解释一下在 Tampermonkey 中使用 @grant none
的优缺点吗?其次,我应该使用哪些 @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
上下文)。
我的问题有两个方面。首先,有人可以解释一下在 Tampermonkey 中使用 @grant none
的优缺点吗?其次,我应该使用哪些 @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
上下文)。