来自@require 脚本的@grant GM 函数

@grant GM functions from @require'd script

我正在编写一系列 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 有同样的问题。

这不太可能发生。

  1. 对它的需求很少。
  2. 更不需要了。
  3. 这将是一个巨大的安全问题:

    1. 各种引擎已经在努力提醒用户脚本正在尝试做什么邪恶的事情——而且大多数用户无论如何都会忽略它。
    2. 确保以前良好的 @required 文件没有损坏。大多数引擎和脚本甚至不首先检查 subsource integrity(散列)。如果 @requires 可以更改元数据,情况会更糟十倍。
    3. 仅确定最终权限可能是一个挑战。在此之前,所有用户脚本引擎都有更多 important/urgent 代码需要编写。

我理解以模块化和 DRY 方式编码的愿望,但超级强大的 @require 文件不是答案。


您或许可以设置您的构建环境 (EG Git) 以自动为某些 @required 文件添加 @grants组装最终的 .user.js 文件。

如果您没有这样的 build/source 跟踪环境,那么无论如何您都 courting disaster 拥有超级动力(或任何)模块。