使用插件监听 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);