2

我正在编写一系列 Greasemonkey 脚本。这些脚本共享它们的大部分功能,因此我认为提取共同特征很有用。

Incommon.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

?

我试图进入@grantcommon.js或通过调用它common.user.js),但似乎 Greasemonkey 无论如何都忽略了它。

我知道这可以被认为是一个安全漏洞,因为由于@require 的级联@grants,您可能不知道最终授予了哪些权限。然而,Greasemonkey 可以从所有 @required 脚本中逻辑推断出最终权限。

我有同样的问题@resource

4

1 回答 1

1

这不太可能发生。

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

    1. 各种引擎已经在努力提醒用户脚本试图做什么邪恶的事情——而且大多数用户还是忽略了它。
    2. 确保以前良好的@required 文件没有损坏。大多数引擎和脚本一开始甚至都不检查子源完整性(哈希)。@require如果s 可以更改元数据,这将糟糕十倍。
    3. 仅仅确定最终权限可能是一个挑战。在此之前,所有用户脚本引擎都有更重要/紧急的事情要编码。

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


您可能可以将构建环境(EG Git )设置为在组装最终文件时自动@grant为某些d 文件添加s 。@require.user.js

如果您没有这样的构建/源跟踪环境,那么无论如何您都在使用超级(或任何)模块招致灾难。

于 2019-01-28T23:13:31.097 回答