使用插件监听 Firefox 选项卡的 http 请求
listen to http requests of a Firefox tab with a plugin
目前我正在为 Mozilla Firefox 编写一个插件,它需要能够侦听选项卡发出的任何 http 请求。所以我正在阅读 mdn article 关于该主题的描述,但我无法理解 运行。
我试过 "The Easy Way" 但我不知道该代码放在哪里。如果我将它放在插件的 index.js 中,它只会显示 "gBrowser is not defined" 如果有人能告诉我如何获得这个 运行.
那就太好了
我也读过这个 article,它似乎与我使用 XMLHttpRequest 的问题相似,我可以开始工作。所以我试图将其形成这个问题的解决方案,但它也不起作用。
非常感谢您的帮助:)
编辑:我能够将第二篇文章中的代码形成为适用于 XMLHttpRequest 的解决方案,如下所示:
let { Cc,Ci } = require("chrome");
var activityDistributor = Cc["@mozilla.org/network/http-activity-distributor;1"].getService(Ci.nsIHttpActivityDistributor);
var httpObserver = {
observeActivity: function(aHttpChannel, aActivityType, aActivitySubtype, aTimestamp, aExtraSizeData, aExtraStringData){
if (aActivityType == nsIHttpActivityObserver.ACTIVITY_TYPE_HTTP_TRANSACTION) {
switch(aActivitySubtype) {
case nsIHttpActivityObserver.ACTIVITY_SUBTYPE_RESPONSE_HEADER:
// received response header
break;
case nsIHttpActivityObserver.ACTIVITY_SUBTYPE_RESPONSE_COMPLETE:
console.log('recieved !!!')
break;
}
}
}
};
activityDistributor.addObserver(httpObserver);
但是它不做日志输出(或者至少我在浏览器控制台中找不到它)。
我找到了解决方案,这只是我的错。我给变量命名错误,所以 "nsIHttpActivityObserver" 没有设置!所以这将是正确的代码:
let { Cc,Ci } = require("chrome");
var nsIHttpActivityObserver = Cc["@mozilla.org/network/http-activity-distributor;1"].getService(Ci.nsIHttpActivityDistributor);
var httpObserver = {
observeActivity: function(aHttpChannel, aActivityType, aActivitySubtype, aTimestamp, aExtraSizeData, aExtraStringData){
if (aActivityType == nsIHttpActivityObserver.ACTIVITY_TYPE_HTTP_TRANSACTION) {
switch(aActivitySubtype) {
case nsIHttpActivityObserver.ACTIVITY_SUBTYPE_RESPONSE_HEADER:
console.log('header received')
break;
case nsIHttpActivityObserver.ACTIVITY_SUBTYPE_RESPONSE_COMPLETE:
console.log('complete anwser received')
break;
}
}
}
};
nsIHttpActivityObserver.addObserver(httpObserver);
目前我正在为 Mozilla Firefox 编写一个插件,它需要能够侦听选项卡发出的任何 http 请求。所以我正在阅读 mdn article 关于该主题的描述,但我无法理解 运行。
我试过 "The Easy Way" 但我不知道该代码放在哪里。如果我将它放在插件的 index.js 中,它只会显示 "gBrowser is not defined" 如果有人能告诉我如何获得这个 运行.
那就太好了我也读过这个 article,它似乎与我使用 XMLHttpRequest 的问题相似,我可以开始工作。所以我试图将其形成这个问题的解决方案,但它也不起作用。
非常感谢您的帮助:)
编辑:我能够将第二篇文章中的代码形成为适用于 XMLHttpRequest 的解决方案,如下所示:
let { Cc,Ci } = require("chrome");
var activityDistributor = Cc["@mozilla.org/network/http-activity-distributor;1"].getService(Ci.nsIHttpActivityDistributor);
var httpObserver = {
observeActivity: function(aHttpChannel, aActivityType, aActivitySubtype, aTimestamp, aExtraSizeData, aExtraStringData){
if (aActivityType == nsIHttpActivityObserver.ACTIVITY_TYPE_HTTP_TRANSACTION) {
switch(aActivitySubtype) {
case nsIHttpActivityObserver.ACTIVITY_SUBTYPE_RESPONSE_HEADER:
// received response header
break;
case nsIHttpActivityObserver.ACTIVITY_SUBTYPE_RESPONSE_COMPLETE:
console.log('recieved !!!')
break;
}
}
}
};
activityDistributor.addObserver(httpObserver);
但是它不做日志输出(或者至少我在浏览器控制台中找不到它)。
我找到了解决方案,这只是我的错。我给变量命名错误,所以 "nsIHttpActivityObserver" 没有设置!所以这将是正确的代码:
let { Cc,Ci } = require("chrome");
var nsIHttpActivityObserver = Cc["@mozilla.org/network/http-activity-distributor;1"].getService(Ci.nsIHttpActivityDistributor);
var httpObserver = {
observeActivity: function(aHttpChannel, aActivityType, aActivitySubtype, aTimestamp, aExtraSizeData, aExtraStringData){
if (aActivityType == nsIHttpActivityObserver.ACTIVITY_TYPE_HTTP_TRANSACTION) {
switch(aActivitySubtype) {
case nsIHttpActivityObserver.ACTIVITY_SUBTYPE_RESPONSE_HEADER:
console.log('header received')
break;
case nsIHttpActivityObserver.ACTIVITY_SUBTYPE_RESPONSE_COMPLETE:
console.log('complete anwser received')
break;
}
}
}
};
nsIHttpActivityObserver.addObserver(httpObserver);