在我的插件中,我必须以urlencoded POST提交数据,现在我使用js脚本来执行此操作(在当前页面中注入表单并提交它)但我想知道是否有解决方案来执行此操作Firefox Addon SDK?
我还没有在高级API中找到线索,但我对低级别不太熟悉,是否可以使用' window / utils' openDialog方法? 有一些args参数,但我不知道如何使用它。
感谢。
修改
具体来说,我需要在新标签中模仿html表单的行为。
答案 0 :(得分:2)
查看以下两个主题:(1)Replication of Form method with loadOneTab和(2)Use Blob on firefox add-on
你可以做的一件有趣的事情是,XHR请求它并使用返回的源使它成为blob并在tab中加载加载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
或者只看@nmaier如何将数据发布到新标签页。
或者凌乱的方式,从源代码中创建一个数据网址,如`data:text / html, rawr &#39;并把它放在你的网址栏。我更喜欢@nmaiers方法
或者再看看@nmaier如何将数据发布到新标签页。 (我喜欢他的方式)
答案 1 :(得分:1)
只是为我的评论添加代码,我这样做了:
const querystring = require('sdk/querystring');
let stringStream = Cc["@mozilla.org/io/string-input-stream;1"].createInstance(Ci.nsIStringInputStream);
stringStream.data = querystring.stringify(params); // params is a json data
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);
var tabBrowser = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator).getMostRecentWindow("navigator:browser").gBrowser;
var selectedTabIndex = tabBrowser.tabContainer.selectedIndex;
var newTab = tabBrowser.loadOneTab("https://myurl.com/", {
inBackground: false,
postData: postData
});
tabBrowser.moveTabTo(newTab, selectedTabIndex + 1);
答案 2 :(得分:0)
使用可以使用Request发送您的数据。
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);
}
});