如何为firefox编译此扩展?

如何为firefox编译此扩展?,firefox,build,firefox-addon,firefox-addon-sdk,Firefox,Build,Firefox Addon,Firefox Addon Sdk,如何将其编译成firefox插件?我曾尝试使用位于的firefox插件生成器,但当我单击test时,它会显示“XPI未构建”。有谁能告诉我如何将此代码转换为firefox扩展的函数吗?多谢各位 //create an nsIObserver implementor var listener = { observe : function(aSubject, aTopic, aData) { var httpChannel = aSubject.QueryInterface(Comp

如何将其编译成firefox插件?我曾尝试使用位于的firefox插件生成器,但当我单击test时,它会显示“XPI未构建”。有谁能告诉我如何将此代码转换为firefox扩展的函数吗?多谢各位

//create an nsIObserver implementor
  var listener = {
observe : function(aSubject, aTopic, aData) {
      var httpChannel = aSubject.QueryInterface(Components.interfaces.nsIHttpChannel);


      if (aTopic == "http-on-modify-request") {

        var channel= aSubject.QueryInterface(Components.interfaces.nsIHttpChannel);

        if(channel.requestMethod == "POST")
        {

            channel=channel.QueryInterface(Components.interfaces.nsIUploadChannel);  
            channel = channel.uploadStream;  
            channel.QueryInterface(Components.interfaces.nsISeekableStream)
                            .seek(Components.interfaces.nsISeekableStream.NS_SEEK_SET,    0);  
            var stream = Components.classes["@mozilla.org/binaryinputstream;1"]
                                .createInstance(Components.interfaces.nsIBinaryInputStream);  
            stream.setInputStream(channel);  
            var postBytes = stream.readByteArray(stream.available());  
            poststr = String.fromCharCode.apply(null, postBytes);  

            //change the poststr

            // poststr=poststr.replace(....);  

            // ERROR HERE - stringStream is not defined
            stringStream.setData(poststr, poststr.length);  
            //changing the postdata  
            channel = channel.QueryInterface(Components.interfaces.nsIUploadChannel);  
            channel = channel.uploadStream;  
            channel = channel.QueryInterface(Components.interfaces.nsISeekableStream)
                      .seek(Components.interfaces.nsISeekableStream.NS_SEEK_SET, 0);  
                channel.uploadStream.QueryInterface(Components.interfaces.nsIMIMEInputStream);  
            channel.uploadStream.setData(stringStream);  
            channel.requestMethod = "POST";

        }

      }

},

QueryInterface : function(aIID) {
   if (aIID.equals(Components.interfaces.nsISupports) ||
        aIID.equals(Components.interfaces.nsIObserver))
     return this;
   throw Components.results.NS_NOINTERFACE;
}
 };

 var observerService = null;

var Init = {
addObserver : function(){
  observerService = Components.classes["@mozilla.org/observer-    service;1"].getService(Components.interfaces.nsIObserverService);
  observerService.addObserver(listener, "http-on-modify-request", false);
},

removeObserver : function(){
  observerService.removeObserver(listener, "http-on-modify-request");
}
};

Init.addObserver();
  • 编辑:我已经阅读了Firefox的官方文档,但它令人困惑,它主要处理基于gui的插件,并且没有提供太多的示例来说明如何为它创建扩展
这里的示例是针对经典(基于XUL)扩展的,而不是针对附加SDK。您仍然可以使用添加该观察者。此外,基于SDK的扩展通常不能访问
组件
对象,这是必需的。将以下代码添加到
main.js
文件中:

var观察员=需要(“观察员服务”);
var{Cc,Ci}=require(“chrome”);
添加(“修改请求时的http”,函数(主题、数据)
{
var channel=subject.QueryInterface(Ci.nsIHttpChannel);
if(channel.requestMethod==“POST”)
{
channel=channel.QueryInterface(Ci.nsIUploadChannel);
channel=channel.uploadStream;
通道查询接口(Ci.nsiekablestream)
.seek(Ci.nsisekablestream.NS_seek_SET,0);
var stream=Cc[“@mozilla.org/binaryinputstream;1”]
.createInstance(Ci.nsIBinaryInputStream);
stream.setInputStream(通道);
var postBytes=stream.readByteArray(stream.available());
poststr=String.fromCharCode.apply(null,postBytes);
//更改poststr
//poststr=poststr.replace(..);
//此处出错-未定义stringStream
setData(poststr,poststr.length);
//更改postdata
channel=channel.QueryInterface(Ci.nsIUploadChannel);
channel=channel.uploadStream;
通道查询接口(Ci.nsiekablestream)
.seek(Ci.nsisekablestream.NS_seek_SET,0);
channel.uploadStream.QueryInterface(Ci.nsIMIMEInputStream);
channel.uploadStream.setData(stringStream);
channel.requestMethod=“POST”;
}
});

请注意,在您提供的代码中,我只是用
Cc
替换了
Components.class
,用
Ci
替换了
Components.interfaces
,我不确定这段代码应该做什么,但我很确定它不起作用。

非常感谢,这帮助我理解了一些事情,因此我现在可以改进我想要做的事情,而不必担心构建它+1.