Javascript 在修改请求时使用HTTP重定向URL
我正在为Firefox构建一个插件,如果URL符合某些条件,它会将请求重定向到新的URL。我试过这个,但不起作用 在修改请求时,我在HTTP上注册了一个观察者来处理URL,如果URL符合我的条件,我将重定向到一个新的URL 这是我的密码:Javascript 在修改请求时使用HTTP重定向URL,javascript,firefox-addon,http-redirect,firefox-addon-restartless,firefox-addon-overlay,Javascript,Firefox Addon,Http Redirect,Firefox Addon Restartless,Firefox Addon Overlay,我正在为Firefox构建一个插件,如果URL符合某些条件,它会将请求重定向到新的URL。我试过这个,但不起作用 在修改请求时,我在HTTP上注册了一个观察者来处理URL,如果URL符合我的条件,我将重定向到一个新的URL 这是我的密码: var Cc = Components.classes; var Ci = Components.interfaces; var Cr = Components.results; var newUrl = "https://google.com"; fun
var Cc = Components.classes;
var Ci = Components.interfaces;
var Cr = Components.results;
var newUrl = "https://google.com";
function isInBlacklist(url) {
// here will be somemore condition, I just use youtube.com to test
if (url.indexOf('youtube.com') != -1) {
return true;
}
return false;
}
exports.main = function(options,callbacks) {
// Create observer
httpRequestObserver =
{
observe: function (subject, topic, data) {
if (topic == "http-on-modify-request") {
var httpChannel = subject.QueryInterface(Ci.nsIHttpChannel);
var uri = httpChannel.URI;
var domainLoc = uri.host;
if (isInBlacklist(domainLoc) === true) {
httpChannel.cancel(Cr.NS_BINDING_ABORTED);
var gBrowser = utils.getMostRecentBrowserWindow().gBrowser;
var domWin = channel.notificationCallbacks.getInterface(Ci.nsIDOMWindow);
var browser = gBrowser.getBrowserForDocument(domWin.top.document);
browser.loadURI(newUrl);
}
}
},
register: function () {
var observerService = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
observerService.addObserver(this, "http-on-modify-request", false);
},
unregister: function () {
var observerService = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
observerService.removeObserver(this, "http-on-modify-request");
}
};
//register observer
httpRequestObserver.register();
};
exports.onUnload = function(reason) {
httpRequestObserver.unregister();
};
我是Firefox插件开发新手。您可以通过调用重定向频道。 一旦频道打开,这是不可能的,但在
http on modify request
中,它将工作
因此,在代码中,您可以执行以下操作:
Cu.import("resource://gre/modules/Services.jsm");
// ...
if (condition) {
httpChannel.redirectTo(
Services.io.newURI("http://example.org/", null, null));
}
看起来您可能正在使用附加SDK。在这种情况下,请继续阅读。您只需做一个
httpChannel.URI.spec = newUrl;
而不是
httpChannel.cancel(Cr.NS_BINDING_ABORTED);
...
browser.loadURI(newUrl);
不确定在您的情况下它会有多“安全”,因为我不确定在这个阶段更改URL以指向完全不同的域时,请求中的其他头(例如Cookie
)将如何被操纵