如何使用pagemod排除firefox插件内容中的网站?

时间:2012-08-07 19:50:54

标签: regex firefox-addon firefox-addon-sdk userscripts content-script

我正在研究用户脚本的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)。

2 个答案:

答案 0 :(得分:3)

您可以在正则表达式中使用负向预测来实现此目的:

include: /^https?:\/\/([^\/]+\.)?example.com\/(?!somewhere).*/

此正则表达式与http://example.com/https://example.com/http://foo.example.com/http://example.com/subdir匹配,但不匹配http://example.com/somewherehttp://fooexample.com/

答案 1 :(得分:2)

include选项中,并不总是可以使用正则表达式执行排除规则,并且在可能的情况下,它可能会非常复杂。

执行排除的最简单,最可靠的方法可能是将其添加到contentScriptFile

像这样(未经测试):

if (/^https?.*badSite\.net.*$/.test (location.href) )
    return;