2013-10-15 24 views
2

我想从我的插件发布图像到我的Servlet来处理图像并返回PDF。该servlet工作。我只是不知道如何处理从我的插件生成的PDF。如何让Firefox用firefox-addon-sdk处理POST请求的结果?

const request= require("sdk/request").Request; 
... 
      let req= request({ 
       url: "http://localhost:8090/Whatever/PdfServlet", 
       content: params, 
       onComplete: function (response) { 
        console.log(response.text) 
       } 
      }); 
      req.post(); 

在这里,对象PARAMS包含编码的图像以base64。一切正常,我可以在控制台日志中看到PDF流的开始。但是,如何让Firefox显示其打开/保存对话框,以便用户可以保存或查看PDF?

回答

2

这里有一个解决方案:

 const querystring= require('sdk/querystring'); 
     const winUtils= require('sdk/window/utils'); 

... 
      let stringStream= Cc["@mozilla.org/io/string-input-stream;1"]. 
        createInstance(Ci.nsIStringInputStream); 
      stringStream.data= querystring.stringify(params); 
      let postData= Cc["@mozilla.org/network/mime-input-stream;1"]. 
       createInstance(Ci.nsIMIMEInputStream); 
      postData.addHeader("Content-Type", "application/x-www-form-urlencoded"); 
      postData.addContentLength = true; 
      postData.setData(stringStream); 
      winUtils.getMostRecentBrowserWindow().loadURI("http://localhost:8090/Whatever/PdfServlet", null, postData, null); 

或者,我可以打开一个新的窗口,但我不喜欢这样:

winUtils.openDialog({ 
     args: ["http://localhost:8090/Whatever/PdfServlet", null, null, postData] 
    }); 
+0

真棒人感谢分享你找到了解决办法。 – Noitidart

+0

对于WebExtensions,我不得不从内容脚本注入并提交表单。 –