我正在研究用户脚本的Firefox Addon版本。使用page-mod库,addon语法非常简单。例如:
var data = require("self").data;
var pageMod = require("page-mod");
pageMod.PageMod({
include: "*.example.com",
contentScriptWhen: 'end',
contentScriptFile: data.url("test.user.js")
});
这将为匹配test.user.js
的网站运行脚本*.example.com
。但是在一个典型的用户脚本中我还可以指定一个排除行,这样我就可以轻松地绕过所包含的url的子目录。我想要一条这样的一条线:
exclude: "*.example.com/somewhere",
但是pagemod文档没有列出任何此类选项(它似乎也不存在)。 在这种情况下如何指定排除?
看起来include也可以接受从正则表达式构建的match-pattern。但是,我很难想象正则表达式会匹配* .example.com而不是* .example.com / subdir(还有* .example.com / othersubdirs)。
答案 0 :(得分:3)
您可以在正则表达式中使用负向预测来实现此目的:
include: /^https?:\/\/([^\/]+\.)?example.com\/(?!somewhere).*/
此正则表达式与http://example.com/
,https://example.com/
,http://foo.example.com/
和http://example.com/subdir
匹配,但不匹配http://example.com/somewhere
或http://fooexample.com/
。
答案 1 :(得分:2)
在include
选项中,并不总是可以使用正则表达式执行排除规则,并且在可能的情况下,它可能会非常复杂。
执行排除的最简单,最可靠的方法可能是将其添加到contentScriptFile
。
像这样(未经测试):
if (/^https?.*badSite\.net.*$/.test (location.href) )
return;