我正在寻找一个firefox扩展,它将获取一个url,对它应用一个正则表达式来生成第二个url。 然后我需要让firefox重定向到这个新URL,而无需用户做任何事情。
有没有人有任何我可以用来学习如何做的例子。我已经使用了firefox教程来实现这个目标..
// Import the page-mod API
var pageMod = require("sdk/page-mod");
// Import the self API
var self = require("sdk/self");
// Create a page mod
// It will run a script whenever a ".org" URL is loaded
// The script replaces the page contents with a message
pageMod.PageMod({
include: "*",
contentScript: 'window.alert("Matched Page");'
})
所以我的问题是,我该怎么做呢。
例如,如果用户输入http://www.mywebsite/data/7287232/wherever
,我希望将其重定向到http://www.anotherwebsite/folder/7287232
答案 0 :(得分:2)
该示例非常复杂,该可跟踪通道示例的主要目的是获取在该uri处加载的源代码的 COPY 。
const { Ci, Cu, Cc, Cr } = require('chrome'); //const {interfaces: Ci, utils: Cu, classes: Cc, results: Cr } = Components;
Cu.import('resource://gre/modules/Services.jsm');
Cu.import('resource://gre/modules/devtools/Console.jsm');
var observers = {
'http-on-modify-request': {
observe: function (aSubject, aTopic, aData) {
console.info('http-on-modify-request: aSubject = ' + aSubject + ' | aTopic = ' + aTopic + ' | aData = ' + aData);
var httpChannel = aSubject.QueryInterface(Ci.nsIHttpChannel);
var requestUrl = httpChannel.URI.spec
if (/\.org/.test(requestUrl) || /http\:\/\/www\.mywebsite\/data\/7287232\/.+/.test(requestUrl)) {
httpChannel.redirectTo(Services.io.newURI('http://www.anotherwebsite/folder/7287232', null, null));
}
},
reg: function () {
Services.obs.addObserver(observers['http-on-modify-request'], 'http-on-modify-request', false);
},
unreg: function () {
Services.obs.removeObserver(observers['http-on-modify-request'], 'http-on-modify-request');
}
}
};
在addon启动时注册观察者运行:
//register all observers
for (var o in observers) {
observers[o].reg();
}
并在关闭addon时取消注册所有观察者:
//unregister all observers
for (var o in observers) {
observers[o].unreg();
}
答案 1 :(得分:2)