Redirecting Request (nsiHttpChannel?) in Firefox Extensions

后端 未结 4 1889
旧巷少年郎
旧巷少年郎 2021-02-01 13:17

I\'ve been trying at this for a long time now, and no good results.

var myObserver = {
    observe: function(subject, topic, data)
    {
        if (topic == \"h         


        
4条回答
  •  感情败类
    2021-02-01 14:00

    I've done it this way: stop nsIHttpChannel on "http-on-modify-request" event, get browser object for current window, call browser.loadURI.

    var utils = require("sdk/window/utils");
    
    function needsRedirect(url) {
        // to be implemented
        return true;
    }
    
    function generateNewUrl(url) {
        // to be implemented
        return "http://www.example.com/";
    }
    
    Cc["@mozilla.org/observer-service;1"]
        .getService(Ci.nsIObserverService)
        .addObserver({
            observe: function(subject, topic, data) {
                var channel = subject.QueryInterface(Ci.nsIHttpChannel);
                var url = channel.originalURI.spec;
                if (needsRedirect(url)) {
                    //stop
                    channel.cancel(Cr.NS_BINDING_ABORTED);
    
                    //redirect
                    var gBrowser = utils.getMostRecentBrowserWindow().gBrowser;
                    var domWin = channel.notificationCallbacks.getInterface(Ci.nsIDOMWindow);
                    var browser = gBrowser.getBrowserForDocument(domWin.top.document);
                    browser.loadURI(generateNewUrl(url));
    
                }
            }
        }, "http-on-modify-request", false);
    

提交回复
热议问题