Javascript 如何确定http请求';s位置/来源(地址栏)?

Javascript 如何确定http请求';s位置/来源(地址栏)?,javascript,firefox-addon,firefox-addon-sdk,Javascript,Firefox Addon,Firefox Addon Sdk,因此,当他试图加载的页面与我的条件(regex)匹配时,我尝试将浏览器重定向到另一个网页。现在看起来是这样的:(想出了它) 但问题是,这也将取代嵌入页面中的图像URL。我的问题是,有没有一种方法可以改变http请求是通过键入url或单击指向页面的链接发出的?因此,只要每次url出现在地址栏中即可。 我想读一下当前选项卡的url,并将其与请求url进行比较,但我还没有找到确切的方法。我有个主意 如果您使用console.log(Ci.nsIHttpChannel)您会看到它有一堆标志,请参见底部的

因此,当他试图加载的页面与我的条件(regex)匹配时,我尝试将浏览器重定向到另一个网页。现在看起来是这样的:(想出了它)

但问题是,这也将取代嵌入页面中的图像URL。我的问题是,有没有一种方法可以改变http请求是通过键入url或单击指向页面的链接发出的?因此,只要每次url出现在地址栏中即可。
我想读一下当前选项卡的url,并将其与请求url进行比较,但我还没有找到确切的方法。

我有个主意

如果您使用
console.log(Ci.nsIHttpChannel)
您会看到它有一堆
标志,请参见底部的img

所以我想通过测试
Ci.nsithtpchannel.load\u INITIAL\u document\u URI
的标志来测试它是否是主加载,也就是说它不在子帧中,而是选项卡的整个文档。如果是整个文档,则可能来自链接、url栏或搜索栏

所以试试这个:

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栏。然后添加事件侦听器以更改url栏值。在更改之后,如果用户点击enter或单击go,那么它将注册观察者。然后在测试了
Ci.nsIHttpChannel.LOAD\u INITIAL\u DOCUMENT\u URI之后,取消注册观察者。

我想通过读取通过请求通道获得的浏览器对象的url,将请求url与选项卡url进行比较,但在http on modify请求事件触发时,uri属性尚未更改。(在尝试更改url之前,它仍然是网站的uri)好主意!我要试一试。另外,我建议将&to&&更改为资源友好型,因为如果第一个值为真,&&只检查第二个值。吹毛求疵,我知道,但你不能建议在StackOverflow上编辑一个字符实际上
&
&
有很大不同。单个
&
是位运算符。因此,请确保使用单个
&
:)以下是教程:废话。我想我在考虑另一种语言。所以我试了你的第一种方法,但它似乎真的不起作用
if(channel&Ci.nsittpchannel.LOAD\u INITIAL\u DOCUMENT\u URI)console.log(“foo”)
在我导航到example.com时没有触发,我忘了它是
channel.loadFlags&Ci.nsIHttp…..
我现在就编辑帖子。我在做
channel&Ci….
这是错误的。需要
loadFlags
参数。
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);
}