打开一个标签并在firefox插件中向其发出POST请求

打开一个标签并在firefox插件中向其发出POST请求,firefox,firefox-addon,firefox-addon-sdk,Firefox,Firefox Addon,Firefox Addon Sdk,在我的插件中,我必须以urlencoded POST的形式提交数据,目前我使用了js脚本(在当前页面中插入一个表单并提交),但我想知道是否有一种解决方案可以使用Firefox插件SDK来实现这一点 我在高级API中没有找到任何线索,但我对低级API不太熟悉,是否可以使用“window/utils”方法? 有一些args参数,但我不知道如何使用它 谢谢 编辑 具体来说,我需要在新选项卡中模拟html表单的行为。使用可以用来发送数据 var Request = require("sdk/reques

在我的插件中,我必须以urlencoded POST的形式提交数据,目前我使用了js脚本(在当前页面中插入一个表单并提交),但我想知道是否有一种解决方案可以使用Firefox插件SDK来实现这一点

我在高级API中没有找到任何线索,但我对低级API不太熟悉,是否可以使用“window/utils”方法? 有一些args参数,但我不知道如何使用它

谢谢

编辑

具体来说,我需要在新选项卡中模拟html表单的行为。

使用可以用来发送数据

var Request = require("sdk/request").Request;
var latestTweetRequest = Request({
  url: "https://api.twitter.com/1/statuses/user_timeline.json?screen_name=mozhacks&count=1",
  onComplete: function (response) {
    var tweet = response.json[0];
    console.log("User: " + tweet.user.screen_name);
    console.log("Tweet: " + tweet.text);
  }
});

查看以下两个主题:(1)和(2)

您可以做的一件有趣的事情是,XHR请求它,并使用返回的源代码使其成为blob并在选项卡中加载blob:

var {Blob, File} = Cu.import("resource://gre/modules/Services.jsm", {});
var oFileBody = '<a id="a"><b id="b">hey!</b></a>'; // the body of the new file...
var oBlob = Blob([oFileBody], { type: "text/html"});
var blobUrl = URL.createObjectURL(oBlob); //returns a string like blob:null/bbe1b94e-0800-4af2-9d9e-df09c0b9cab3 so paste that into your url bar
var{Blob,File}=Cu.import('resource://gre/modules/Services.jsm", {});
变量oFileBody='hey!';//新文件的正文。。。
var oBlob=Blob([oFileBody],{type:“text/html”});
var blobUrl=URL.createObjectURL(oBlob)//返回类似blob:null/bbe1b94e-0800-4af2-9d9e-df09c0b9cab3的字符串,以便将其粘贴到url栏中
或者看看@nmaier是如何将数据发布到新选项卡的

或者用一种混乱的方式,从源代码中创建一个数据url,比如“data:text/html,rawr”,然后将其放在url栏中。我更喜欢@nmaiers方法


或者再次看看@nmaier是如何将数据发布到新选项卡的。(我喜欢他的方式)

为了给我的评论添加代码,我这样做了:

const querystring=require('sdk/querystring');
让stringStream=Cc[“@mozilla.org/io/string输入流;1”].createInstance(Ci.nsIStringInputStream);
stringStream.data=querystring.stringify(参数);//params是一个json数据源
让postData=Cc[“@mozilla.org/network/mime输入流;1”].createInstance(Ci.nsIMIMEInputStream);
addHeader(“内容类型”,“应用程序/x-www-form-urlencoded”);
postData.addContentLength=true;
setData(stringStream);
var tabBrowser=Cc[“@mozilla.org/appshell/windowmediator;1”].getService(Ci.nsIWindowMediator.getMostRecentWindow(“导航器:浏览器”).gBrowser;
var selectedTabIndex=tabBrowser.tabContainer.selectedIndex;
var newTab=tabBrowser.loadOneTab(“https://myurl.com/", {
背景:错误,
postData:postData
});
tabBrowser.moveTabTo(新建选项卡,选择TabIndex+1);

我知道我可以使用Request发送请求,但我需要将生成的html显示到一个新选项卡上,这样就不起作用了。具体来说,我需要模仿html表单的行为。@JérémieBertrand那么为什么不将生成的html发送到新选项卡并将其附加到文档中呢?在过去的几个月里,关于这个主题的StackOverflow有很多主题。搜索
FormData
,他们也在用一些有趣的方式发布数据,打开一些新的标签。您也可以使用XHR来实现。这些都在firefox插件标签中的主题中,主题也很棒。@Noitidart谢谢,我将对此进行研究。谢谢,最后我使用postData的答案以及loadOneTab和moveTabTo方法来打开和放置选项卡。感谢分享您最后所做的工作。它可以帮助将来遇到同样问题的人。就我所知:)