2

我正在开发用户脚本的 Firefox 插件版本。使用 page-mod 库的插件语法非常简单。例如:

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 的子目录。IOW,我想要这样的一行:

exclude: "*.example.com/somewhere",

但是pagemod文档没有列出任何这样的选项(它似乎也不存在)。 在这种情况下,我将如何指定排除项?

看起来 include 也可以接受从正则表达式构建的匹配模式。但是,我无法想象正则表达式会匹配 *.example.com 但不匹配 *.example.com/subdir(但也匹配 *.example.com/othersubdirs)。

4

2 回答 2

3

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

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

此正则表达式匹配http://example.com/,和 ,https://example.com/但不匹配or 。http://foo.example.com/http://example.com/subdirhttp://example.com/somewherehttp://fooexample.com/

于 2012-08-08T06:30:04.147 回答
2

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

可能最简单、最可靠的排除方法是将其添加到您的contentScriptFile.

像这样的东西(未经测试):

if (/^https?.*badSite\.net.*$/.test (location.href) )
    return;
于 2012-08-07T20:52:06.943 回答