Javascript 如何确定http请求';s位置/来源(地址栏)?
因此,当他试图加载的页面与我的条件(regex)匹配时,我尝试将浏览器重定向到另一个网页。现在看起来是这样的:(想出了它) 但问题是,这也将取代嵌入页面中的图像URL。我的问题是,有没有一种方法可以改变http请求是通过键入url或单击指向页面的链接发出的?因此,只要每次url出现在地址栏中即可。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)您会看到它有一堆标志,请参见底部的
我想读一下当前选项卡的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);
}