Javascript 在firefox加载项上使用Blob
一直在尝试让以下代码在firefox加载项中工作:Javascript 在firefox加载项上使用Blob,javascript,firefox,firefox-addon,firefox-addon-sdk,xpcom,Javascript,Firefox,Firefox Addon,Firefox Addon Sdk,Xpcom,一直在尝试让以下代码在firefox加载项中工作: var oMyForm = new FormData(); oMyForm.append("username", "Groucho"); oMyForm.append("accountnum", 123456); // number 123456 is immediately converted to string "123456" // HTML file input user's choice... oMyForm.append("us
var oMyForm = new FormData();
oMyForm.append("username", "Groucho");
oMyForm.append("accountnum", 123456); // number 123456 is immediately converted to string "123456"
// HTML file input user's choice...
oMyForm.append("userfile", fileInputElement.files[0]);
// JavaScript file-like object...
var oFileBody = '<a id="a"><b id="b">hey!</b></a>'; // the body of the new file...
var oBlob = new Blob([oFileBody], { type: "text/xml"});
oMyForm.append("webmasterfile", oBlob);
var oReq = new XMLHttpRequest();
oReq.open("POST", "http://foo.com/submitform.php");
oReq.send(oMyForm);
var myform=new FormData();
myform.append(“用户名”、“Groucho”);
myform.append(“accountnum”,123456);//数字123456立即转换为字符串“123456”
//HTML文件输入用户的选择。。。
myform.append(“userfile”,fileInputElement.files[0]);
//JavaScript类文件对象。。。
黑体变异数
所以我知道我必须使用XPCOM,但我找不到等效的。到目前为止,我发现:
var oMyForm = Cc["@mozilla.org/files/formdata;1"].createInstance(Ci.nsIDOMFormData);
oMyForm.append("username", "Groucho");
oMyForm.append("accountnum", 123456); // number 123456 is immediately converted to string "123456"
// JavaScript file-like object...
var oFileBody = '<a id="a"><b id="b">hey!</b></a>'; // the body of the new file...
var oBlob = Cc["@mozilla.org/files/file;1"].createInstance(Ci.nsIDOMFile, [oFileBody], { type: "text/xml"});
oMyForm.append("webmasterfile", oBlob);
var oReq = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.nsIXMLHttpRequest);
oReq.open("POST", "http://localhost:3000");
oReq.send(oMyForm);
var myform=Cc[“@mozilla.org/files/formdata;1”].createInstance(Ci.nsIDOMFormData);
myform.append(“用户名”、“Groucho”);
myform.append(“accountnum”,123456);//数字123456立即转换为字符串“123456”
//JavaScript类文件对象。。。
变量oFileBody='hey!';//新文件的正文。。。
var oBlob=Cc[“@mozilla.org/files/file;1”].createInstance(Ci.nsIDOMFile,[oFileBody],{type:“text/xml”});
附加(“webmasterfile”,oBlob);
var oReq=Cc[“@mozilla.org/xmlextas/xmlhttprequest;1”].createInstance(Ci.nsIXMLHttpRequest);
开放式(“POST”http://localhost:3000");
oReq.发送(myForm);
本质上,问题是var oBlob=Cc[“@mozilla.org/files/file;1”].createInstance(Ci.nsIDOMFile,[oFileBody],{type:'text/xml})因为“@mozilla.org/files/file;1”
或Ci.nsIDOMFile
不正确。请注意,nsIDOMFile是从nsIDOMBlob继承的
有人知道该怎么做吗
非常感谢。让我们通过作弊来回答这个问题:
- 实际上有
Blob
和文件
,而SDK模块没有:(
Cu.import()
将返回代码模块的完整全局值,包括Blob
- 知道了这一点,我们就可以通过导入一个已知的模块,比如
Services.jsm
基于您的代码的完整、经过测试的示例:
const {Cc, Ci, Cu} = require("chrome");
// This is the cheat ;)
const {Blob, File} = Cu.import("resource://gre/modules/Services.jsm", {});
var oMyForm = Cc["@mozilla.org/files/formdata;1"].createInstance(Ci.nsIDOMFormData);
oMyForm.append("username", "Groucho");
oMyForm.append("accountnum", 123456); // number 123456 is immediately converted to string "123456"
// JavaScript file-like object...
var oFileBody = '<a id="a"><b id="b">hey!</b></a>'; // the body of the new file...
var oBlob = Blob([oFileBody], { type: "text/xml"});
oMyForm.append("webmasterfile", oBlob, "myfile.html");
var oReq = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.nsIXMLHttpRequest);
oReq.open("POST", "http://example.org/");
oReq.send(oMyForm);
const{Cc,Ci,Cu}=require(“chrome”);
//这就是骗局;)
const{Blob,File}=Cu.import(“resource://gre/modules/Services.jsm", {});
var myform=Cc[“@mozilla.org/files/formdata;1”].createInstance(Ci.nsIDOMFormData);
myform.append(“用户名”、“Groucho”);
myform.append(“accountnum”,123456);//数字123456立即转换为字符串“123456”
//JavaScript类文件对象。。。
变量oFileBody='hey!';//新文件的正文。。。
var oBlob=Blob([oFileBody],{type:“text/xml”});
append(“webmasterfile”,oBlob,“myfile.html”);
var oReq=Cc[“@mozilla.org/xmlextas/xmlhttprequest;1”].createInstance(Ci.nsIXMLHttpRequest);
开放式(“POST”http://example.org/");
oReq.发送(myForm);
Heh,在多年使用和滥用该平台之后,我现在知道了很多。我很久以前偶然发现的那个骗局。剩下的就是试错。。。哦,而且我也调查了很多!这太壮观了!!它看起来像是发生了一些变化,您不能再像这样得到Blob
或文件了: