Greasy Fork 允许在特定情况下使用外部代码。任何脚本发现使用超出允许范围的外部代码都将会被删除。如果您发现有脚本违反了这些规则,请举报它。
请注意,这些规则仅适用于外部可执行代码。那些加载但不可执行代码不受限制,例如JSON或CSS。
运作机理
用户脚本具有加载和执行其他脚本的技术能力。这可以通过几种不同的方式实现,包括:
- 使用
@require
和@resource
元属性。 - 使用
XmlHttpRequest
下载脚本,然后使用eval
执行。 - 动态添加
<script>
标签。 - 使用 Webpack 的
externals
选项。 - 执行脚本的更新,无论是自动执行还是引导用户执行操作。
虽然这是一个有用的功能,大多数脚本作者都是出于合法目的使用它的,但它也可能被恶意使用。Greasy Fork 的核心原则之一是用户必须能够检查脚本中的代码。外部脚本可以通过多种方式绕过这一原则:它们可能会在没有警告或历史记录的情况下发生更改,它们可以为不同的人提供不同的代码,它们还可以用于在已知库的中间隐藏恶意代码。即使有人检查了外部脚本并确定其是合法的,也不能保证该脚本一直是合法的或将来会一直是合法的。
允许的外部代码
以下是外部代码在 Greasy Fork 上被允许的方式。除非另有规定,否则所有其他 代码规则 都适用于外部代码。
内容交付网络(CDN)
允许使用源自 CDN 的代码。详见获准 CDN 名单。代码可以缩小,但不能混淆。
附有子资源完整性散列的脚本
允许使用 Tampermonkey 格式 下的有子资源完整性的 @require
和@resource
URL。
Greasy Fork 库
在 Greasy Fork 上发布作为库的脚本是允许的。可以通过选择创建新脚本时的选项来创建库。这些库还可以额外设定为从外部 URL 同步,例如 GitHub 仓库
来自原始主机的脚本注入
允许对与其来源相同域的外部脚本进行注入。如果一个脚本在 https://example.com 上运行,并下载 https://example.com/script.js,对其进行修改,然后注入回 https://example.com/,这是允许的。
如果 https://example.com/script.js 被注入到 https://不同网站.com 上,这将被禁止。