您在options 对象的属性中传递了一个RegExp。这样做时,您的正则表达式: include
PageMod
必须匹配整个 URL,而不仅仅是一个子集,并且禁用了 global、ignoreCase 和 multiline。
有关更多详细信息,您可以查看MDN 上的讨论。如果您已经访问过此页面,您可能需要点击ctrl- F5,因为我刚刚更新了一些 RegExp 示例。
你的正则表达式是/\/*.facebook\.*/
. 这不可能匹配任何有效 URL 的全部内容。它目前将匹配以下内容:
.facebook
Afacebook
//////////////Bfacebook................
但是,不匹配:
http://www.facebook.com/
因此,您PageMod
将永远不会被应用。
你想要这样的东西:
var pageMod = require("sdk/page-mod");
pageMod.PageMod({
include: /[^:/]+:\/\/[^/]*\.facebook\.([^/.]*|co\.uk)\/.*/,
contentScriptFile: [
data.url("jquery-2.2.1.min.js"),
data.url("script.js")
]
});
但是,列出要匹配的顶级域 (TLD)会更安全。您必须选择是否要匹配太多域(所有 TLD 或所有包含 的域facebook
),或者只匹配您已验证属于 Facebook 的域。您选择哪一个取决于您的附加组件的功能,以及您希望如何平衡用户的易用性与不在接近facebook
. 理想情况下,您将确定 facebook 拥有的所有域,这些域显示您想要的内容并包含这些内容。
一个include
包含您在问题中列出的域的示例:
include: /[^:/]+:\/\/[^/]*\.facebook\.(com|co\.uk|nz|fr|de|it|ru)\/.*/,
完整的 SDK 插件:
这是我用于测试的完整 Firefox Add-on SDK 扩展:
包.json:
{
"title": "Test PageMod RegExp",
"name": "pagemodregexp1",
"version": "0.0.1",
"description": "Test using a RegExp with PageMod",
"main": "index.js",
"author": "Makyen",
"engines": {
"firefox": ">=38.0a1",
"fennec": ">=38.0a1"
},
"license": "MIT",
"keywords": [
"jetpack"
]
}
index.js:
var self = require("sdk/self");
var data = self.data;
var pageMod = require("sdk/page-mod");
pageMod.PageMod({
//Works (but matches probably bad domain facebook.co.uk):
//include: /[^:/]+:\/\/[^/]*\.facebook\.([^/.]*|co\.uk)\/.*/,
//Works (but matches probably bad domain facebook.co.uk):
//include: /[^:/]+:\/\/[^/]*\.facebook\.(com|co\.uk|nz|fr|de|it|ru)\/.*/,
//Works:
include: /[^:/]+:\/\/[^/]*\.facebook\.com\/.*/,
contentScriptFile: [
// data.url('jquery-2.2.1.min.js'),
data.url('contentScript.js')
]
});
数据/contentScript.js:
window.alert('contentScript.js loaded. URL=' + document.URL);
console.log('contentScript.js loaded. URL=' + document.URL);
导航到时的控制台输出facebook.com
(以及每个警报console.log()
):
console.log: pagemodregexp1: contentScript.js loaded. URL=https://staticxx.facebook.com/common/referer_frame.php
console.log: pagemodregexp1: contentScript.js loaded. URL=https://staticxx.facebook.com/common/referer_frame.php
console.log: pagemodregexp1: contentScript.js loaded. URL=https://www.facebook.com/
关于您列出的域的注释:
facebook.com: valid
facebook.co.uk: broken good chance it is not be owned by Facebook
Whois shows registered to: Technomicom Inc.
NOT registered to Facebook UK LTD (& uses a different physical address)
facebook.nz: invalid: Server not found
facebook.fr: valid: redirects to fr-fr.facebook.com
facebook.de: valid: redirects to de-de.facebook.com
facebook.it: valid: redirects to facebook.com
facebook.ru: invalid: Server not found
鉴于 Facebook 似乎将所有备用域重定向到facebook.com
,我建议不要在您的匹配中包含任何其他域,除了facebook.com
:
include: /[^:/]+:\/\/[^/]*\.facebook\.com\/.*/,