我正在编写一系列 Greasemonkey 脚本。这些脚本共享它们的大部分功能,因此我认为提取共同功能很有用。
在 common.js
中是通用功能,它们调用 GM_functions(例如 GM.xmlHttpRequest
)。每个用户脚本 @require [...]/common.js
有没有办法避免在每个 script.user.js
中重复所有元数据:
// @require [...]/common.js
// @grant GM.getResourceText
// @grant GM.xmlHttpRequest
// @grant GM.setValue
// @grant GM.getValue
// @connect localhost
// @resource styleSheet [...]/style.css
?
我试图在 common.js
中 @grant
(或通过调用它 common.user.js
),但它看起来像 Greasemonkey无论如何都会忽略它。
我知道这可以被认为是一个安全漏洞,因为由于 @require 的级联 @grants,您可能不知道最终授予了哪些特权。然而,Greasemonkey 可以从逻辑上推断出所有 @required 脚本的最终权限。
我对 @resource
有同样的问题。
最佳答案
这不太可能发生。
- 对它的需求很少。
- 对它的需求就更少了。
这将是一个巨大的安全问题:
- 各种引擎已经在努力提醒用户脚本正在尝试做什么邪恶的事情——而且大多数用户无论如何都会忽略它。
- 确保之前良好的
@require
d 文件没有损坏。大多数引擎和脚本甚至不检查 subsource integrity (哈希)放在首位。如果@require
,情况会更糟十倍s 可以改变元数据。 - 仅确定最终权限可能是一个挑战。在此之前,所有用户脚本引擎都有更重要/更紧急的事情要编码。
我理解以模块化和 DRY 方式编码的愿望,但 super 强大 @require
文件不是答案。
您或许可以设置构建环境 (EG Git) 以自动添加 @grant
s 一定 @require
d 文件,当它组装最终的 .user.js
文件。
如果您没有这样的构建/源代码跟踪环境,那么您就是courting disaster无论如何都有超能力(或任何)模块。
关于javascript - 来自@require 脚本的@grant GM 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54410321/