我正在编写一系列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
?
我尝试在@grant
中使用common.js
(或称其为common.user.js
),但似乎Greasemonkey还是忽略了它。
我知道这可以视为安全漏洞,因为您可能不知道由于@require的级联@grants而最终授予了哪些特权。但是Greasemonkey可以从逻辑上从所有@required脚本中推断出最终特权。
我对@resource
有相同的问题。
答案 0 :(得分:1)
这不太可能发生。
这将是一个巨大的安全难题:
@require
d文件不会损坏。大多数引擎和脚本甚至都没有首先检查subsource integrity(哈希)。如果@require
可以更改元数据,那就糟了十倍。我理解以模块化和DRY方式进行编码的愿望,但是功能强大的@require
文件不是答案。
您可能可以设置构建环境(EG Git ),以便在其组装最终@grant
文件时自动为某些@require
d个文件添加.user.js
如果您没有这样的构建/源跟踪环境,那么您courting disaster仍然拥有超强(或任何)模块。