Greasy Fork is available in English.

用户脚本有能力加载和执行其他脚本。最直接的方法是通过 @require 来加载,但也有其他的途径——例如用 XmlHttpRequest 来下载外部脚本,并将其注入 DOM。

虽然这是一个很有用的功能,并且大多数脚本作者将其用在合法目的,但它也可以被恶意使用。Greasy Fork 的一项核心原则就是,必须能让用户阅读和检查脚本代码。而外部脚本可能用多种方法绕过这一原则:它们可以在用户不知情的情况下悄悄改变,而不留下历史记录;它们可以对不同的用户采用不同的代码;它们还可以在知名的库之中插入恶意的代码,以期逃避用户的检查。因此,即便某位用户检查了一个外部脚本,并确定它此时是安全的,他也无法保证该脚本在过去和将来不会包含恶意代码。

为了允许脚本作者继续使用外部脚本,Greasy Fork 有一个 URL 形式的白名单,只允许引用白名单中的外部脚本。白名单中包含的网站应该是:

目前的白名单包括:

75CDN ^https:\/\/cdn\.baomitu\.com\/.*
75CDN ^https:\/\/lib\.baomitu\.com\/.*
Baidu CDN ^(https?:)?\/\/libs\.baidu\.com\/.*
Baidu CDN ^https:\/\/apps\.bdimg\.com\/.*
BootCDN ^https://cdn\.bootcdn\.net\/.*
Bootstrap中文网开放CDN服务 ^(https?:)?\/\/cdn\.bootcss\.com\/.*
BowerCDN ^https:\/\/bowercdn\.net\/.*
cdn.kaskus.com ^(https?:)?\/\/cdn\.kaskus\.com\/.*
cdnjs-hosted libraries ^(https?:)?\/\/cdnjs\.cloudflare\.com\/.*
Firebase CDN ^(https?:)?\/\/cdn\.firebase\.com\/.*
GitCDN (commit-specific URLS only) ^https:\/\/(www\.)?gitcdn\.(xyz|link)\/(cdn|repo)\/[^/]+\/[^/]+\/[0-9a-f]{40}/.*$
gm4-polyfill https:\/\/greasemonkey\.github\.io\/gm4\-polyfill\/gm4\-polyfill\.js(\?.*)?$
Google Hosted Libraries on apis.google.com ^https:\/\/apis\.google\.com\/.*
Google Hosted Libraries on googleapis.com ^(https?:)?\/\/[a-z]+\.googleapis\.com\/.*
Google Maps API ^(https?:)?\/\/maps\.google\.com\/maps\/api\/js.*
Google-hosted libraries on www.gstatic.com ^https:\/\/www\.gstatic\.com\/.*
Greasy-Fork-hosted scripts (https://greasyfork.org/scripts/*.js) ^(https?:)?\/\/greasyfork\.org\/scripts\/.+\.js.*
Greasy-Fork-hosted third party libraries on https://greasyfork.org/libraries/ ^(https?:)?\/\/greasyfork\.org\/libraries\/.*
gwdang_extension.js ^https:\/\/browser\.gwdang\.com\/get\.js\?f=\/js\/gwdang_extension\.js$
Highcharts CDN ^(https?:)?\/\/code\.highcharts\.com\/.*
jQuery on code.jquery.com ^(https?:)?\/\/code\.jquery\.com/.*
jsDelivr GitHub commit-specific references ^(https?:)?//cdn\.jsdelivr\.net/gh/[^/]+/[^/@]+@[a-f0-9]{40}
jsDelivr-hosted libraries ^(https?:)?//cdn\.jsdelivr\.net\/(?!gh/).*
MathJax CDN ^(https?:)?\/\/cdn\.mathjax\.org\/.*
Microsoft Ajax CDN ^(https?:)?\/\/ajax\.aspnetcdn\.com\/.*
Mousetrap ^https:\//craig\.global\.ssl\.fastly\.net\/js\/mousetrap\/.*
OpenUserJS libraries ^(https?:)?//openuserjs.org/src/libs/.+.js.*
static.hdslb.com ^(https?:)?\/\/static\.hdslb\.com\/.*
Todoist Anywhere ^(https?:)?\/\/todoist\.com\/anywhere\/.*
unpkg ^https:\/\/unpkg\.com/.*
Version-specific packd URLs ^https:\/\/bundle\.run\/[^@]+@[0-9\.]+$
Wysibb CDN ^(https?:)?\/\/cdn\.wysibb\.com\/.*
开放静态文件 CDN ^(https?:)?\/\/cdn\.staticfile\.org\/.*

URL 允许使用 URL 不允许使用


如果您尝试发布的一个脚本用 @require包含了此名单之外的外部脚本,您将无法保存您的脚本。

如果您想加载的外部脚本是一个 JavaScript 库(例如 jQuery 或者 YUI),请访问上面列出的网站,看看是否能找到它的链接。cdnjsjsDelivr 提供了大量的常用库。

如果以上网站均没有您想引用的外部脚本,请告知我们,以便我们查找它的链接(乃至我们自己托管)。

如果您想包含的脚本是你自己写的,你可以在 Greasy Fork 上将它提交为一个单独的项目,选择“库”作为它的类型,然后你就可以在你的脚本中引入自己发布的这个库了。