用插件监听Firefox标签的http请求

时间:2016-05-16 12:18:14

标签: javascript firefox firefox-addon

目前我正在为Mozilla Firefox编写一个插件,该插件需要能够监听选项卡发出的任何http请求。所以我正在阅读有关该主题的mdn article的描述,但我无法让它运行。

我尝试了“简单方法”,但我不知道在哪里放置此代码。如果我将它放在插件的index.js中,它只是说“gBrowser未定义”如果有人能告诉我如何运行它会非常好。

我也读过这个article,这与我使用XMLHttpRequest的问题类似,我可以开始工作。所以我试图从这个问题中将其形成解决方案,但它也不起作用。

非常感谢您的帮助:)

编辑:我能够将第二篇文章中的代码构建到适用于XMLHttpRequest的解决方案中,如下所示:

<script>
function clickCounter() {
    if(typeof(Storage) !== "undefined") {
        if (localStorage.clickcount) {
            localStorage.clickcount = Number(localStorage.clickcount)+1;
        } else {
            localStorage.clickcount = 1;
        }
        document.getElementById("result").innerHTML = "You have clicked the button " + localStorage.clickcount + " time(s).";
    } else {
        document.getElementById("result").innerHTML = "Sorry, your browser does not support web storage...";
    }
}
</script>

<p><button onclick="clickCounter()" type="button">Click me!</button></p>
<div id="result"></div>

但它没有做日志输出(或者至少我在浏览器控制台中找不到它。)

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,这只是我的错。我将变量命名为错误,因此未设置“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);