用户脚本中@include和@match有什么区别?

时间:2015-08-04 19:35:10

标签: javascript greasemonkey userscripts tampermonkey

GreaseSpot page on metadata blocks表示两者非常相似,但@match“对*字符的含义设定了更严格的规则。”然后GreaseSpot使用@include进入teach,但this之类的Chrome示例通常似乎使用@match,并表示@include仅支持兼容性目的; @match是首选。

Apparently@include google.*可以在google.evil.com上运行,@match google.*则不能。 这个例子不足以真正看出通配符在这两者之间的表现如何不同,并且在这里的答案中寻求更好的解释。

新GreaseMonkey脚本(Firefox)默认使用@include,而新的TamperMonkey脚本(例如Chrome)默认使用@match

这两者之间究竟有什么不同?

例如,每个人如何处理通配符? 跨浏览器兼容性是否存在差异?
有人选择使用一个而不是另一个有什么理由?

1 个答案:

答案 0 :(得分:19)

当您使用@include can时,不能将正则表达式与@match一起使用。

但是,@ include会为您的用户提供有关应用于所有网站的脚本的更可靠的安全警告。

即使@include表达式允许您对脚本适用的网站更具限制性(例如,使用正则表达式片段指定URL的一部分为数字“[0-9] ] +“,或使用”^ https?://“将这两个方案应用于脚本,而不是用于@match中每个案例的更通用的非正则表达式运算符*,这会导致脚本适用范围更广)。