Firefox Add-On基于通配符重定向URL

时间:2014-04-03 12:07:34

标签: regex firefox-addon

我正在寻找一个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

2 个答案:

答案 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)

嗯..回答最初的主线:

https://addons.mozilla.org/en-US/firefox/addon/redirector

或者那就是你呢? @ScaryAardvark?