#1 - 2018-3-8 22:54
Sai (Awesome!)
组件脚本部分遵循 User Script Metadata 规范,你可以使用 @include @exclude @match 来限制脚本的作用域。

例如:
// ==UserScript==
// @name            脚本名字
// @namespace       tv.bgm.sample
// @grant           none
// @include    */subject/*
// @exclude    */subject/*/*
// ==/UserScript==

其中 @exclude 的优先级高于 @include 和 @match,具体规则请查看
https://developer.chrome.com/extensions/match_patterns

你可以在浏览器的 Console 中输入以下命令来查看组件相关的执行与 metadata 解析信息:
log.setLevel('debug'); 
#2 - 2018-3-8 22:59
(DD集まれ! (๑•̀ㅂ•́)و✧)
mark
#3 - 2018-3-8 23:03
(一个纠结的面瘫伪宅)
试了一下确实好用(bgm24)
#4 - 2018-3-8 23:37
(学会欣赏不完美)
@   grant 也支持?
能不能支持一下 @require
#5 - 2018-3-9 04:23
(V1046-R MAHORO)
看了这个Guide感觉更迷糊了

“正则请以 /^ 开头”这个说法有误

下面的不以/^开头的正则也可以工作:

// @include  872\d\d


可以匹配到 http://bgm.tv/subject/187276

如果要用^(从头匹配):

// @include  ^http://bangumi\.tv/.+


也能工作,所以最前面加/是不必要的
不过,这种处理方式就很怪了。US或者说JS里的正则要两边都用"/"包住的,所以我上面的例子(左右都没用“/”)应该是不合法的,我试了下chrome+tampermonkey也是无效,但是这里就有效。

至于sai给的例子:
// @include  /^(https?://bgm\.tv|http://(bgm\.tv|bangumi\.tv|chii\.in))/(user/.*|(anime|book|music|game|real)/list/.*)

就更怪,只有左边有“/”,右边反而没有。虽然我试了下chrome+tampermonkey这样确实也行,但是为什么不用正规的语法呢?

而且这个结果也非常出人意料:
如果使用:(只有左边有/,右边没有)
// @include  /872\d\d


tampermonkey可以正确匹配 http://bgm.tv/subject/187276, bangumi则不行;
实际上,如果这么写就把/当成字符了,改成
// @include  /1872\d\d
就能匹配。

如果使用左右两边都有“/”的标准写法:
// @include  /872\d\d/


tampermonkey自然可以正常匹配 http://bgm.tv/subject/187276, bangumi因为上述的原因则完全不行。

TL;DR:

1) 应该只有在用户使用"/"两边包裹了字符串(正则字符串)的情况下才把@include 当做正则,其他时候则只做通配符匹配
  1.1) 目前的情况是包了反而会导致匹配时把加的“/”当做反斜杠字符来处理,和Tampermonkey等工作方式冲突
  1.2) Tampermonkey额外支持只在开头加"/"、末尾不加的非标准写法,bangumi不能完美支持,也不推荐支持。所以,那个用正则的范例最好修改一下
  
2) “正则请以 /^ 开头”这个说法不符合现在的工作方式(1. 系统其实支持不从头匹配;另参见1.2)。最好移除或者澄清
#5-1 - 2018-3-9 09:12
windrises
那个范例其实是我写的,后面确实漏了一个/,因为油猴能正常解析就没注意这个细节,我的锅(bgm38)
#5-2 - 2018-3-9 10:06
Sai
windrises 说: 那个范例其实是我写的,后面确实漏了一个/,因为油猴能正常解析就没注意这个细节,我的锅
我还以为是什么特殊规则
#5-3 - 2018-3-9 15:02
Sai
好了,现在按照 https://developer.chrome.com/extensions/match_patterns 的规范来实现,完整的正则规则也是可以用的。
#5-4 - 2018-3-9 16:03
烈之斩
Sai 说: 好了,现在按照 https://developer.chrome.com/extensions/match_patterns 的规范来实现,完整的正则规则也是可以用的。