确定http请求位置/来源(地址栏)

时间:2014-07-22 12:01:08

标签: javascript firefox-addon firefox-addon-sdk

所以当他尝试加载的页面符合我的条件(正则表达式)时,我正试图将浏览器重定向到另一个网页。目前它看起来像这样:(提出它here

function listener(event) {
    var channel = event.subject.QueryInterface(Ci.nsIHttpChannel);
    var url = event.subject.URI.spec;

    if (isToBeRedirected(url)) {
        // replace url
    }
}

exports.main = function() {
    events.on("http-on-modify-request", listener);
}

但问题是,这也会将URL替换为例如嵌入在页面中的图像。我的问题是,有没有办法通过输入网址或点击页面链接来改变http请求?所以只要每次网址都显示在地址栏中 我想过阅读当前标签的网址并将其与请求网址进行比较,但我还是无法确切地知道它是怎么回事。

1 个答案:

答案 0 :(得分:3)

我有个主意。

如果您执行console.log(Ci.nsIHttpChannel),则会看到它有一堆flag,请参见底部的img。

所以我正在考虑测试它是否是主要负载,意味着它不在子框架中,而是通过测试Ci.nsIHttpChannel.LOAD_INITIAL_DOCUMENT_URI的标志来检查标签的整个文档。如果是整个文档,可能来自链接,网址栏或搜索栏。

所以试试这个:

function listener(event) {
    var channel = event.subject.QueryInterface(Ci.nsIHttpChannel);
    var url = event.subject.URI.spec;

    if (channel.loadFlags & Ci.nsIHttpChannel.LOAD_INITIAL_DOCUMENT_URI) {
            //the whole document of the tab is changing
            if (isToBeRedirected(url)) {
                // replace url
            }
    }
}

exports.main = function() {
    events.on("http-on-modify-request", listener);
}


我的另一个想法是,如果你只想更改网址栏。然后添加一个事件监听器来更改url bar值。如果用户点击进入或点击进入更改后,则会注册观察者。然后在测试Ci.nsIHttpChannel.LOAD_INITIAL_DOCUMENT_URI之后,取消注册观察者。