javascript中跨域发布二进制数据

javascript中跨域发布二进制数据,javascript,ajax,api,binary,google-chrome-extension,Javascript,Ajax,Api,Binary,Google Chrome Extension,我正在编写一个Chrome浏览器扩展,它获取当前选项卡视图的快照,并将其上传到我无法控制的web服务API。Chrome扩展库有一个函数(Chrome.tabs.captureVisibleTab.see),用于获取快照并返回数据url中的数据。关于如何上传这些数据,我陷入了僵局 我尝试编写自己的多部分表单请求,并使用ajax请求发布数据。但是,ajax坚持使用UTF-8编码数据,API坚持使用8位编码的二进制文件。我想也许使用像这样的文件上传器插件可以工作,但我似乎无法将JS变量中的数据转换成

我正在编写一个Chrome浏览器扩展,它获取当前选项卡视图的快照,并将其上传到我无法控制的web服务API。Chrome扩展库有一个函数(Chrome.tabs.captureVisibleTab.see),用于获取快照并返回数据url中的数据。关于如何上传这些数据,我陷入了僵局

我尝试编写自己的多部分表单请求,并使用ajax请求发布数据。但是,ajax坚持使用UTF-8编码数据,API坚持使用8位编码的二进制文件。我想也许使用像这样的文件上传器插件可以工作,但我似乎无法将JS变量中的数据转换成上传器将采用的形式


任何关于至少一种新的调查途径的想法都将受到高度赞赏。

事实证明,你可以做到这一点

Chrome有一种通过XMLHTTPRequest发送blob的方法

以下是Chromium问题跟踪程序的示例代码链接:

XMLHttpRequest.prototype.sendAsBinary=函数(datastr,contentType){
var bb=新的BlobBuilder();
var len=数据传输长度;
var数据=新的UINT8阵列(len);
对于(var i=0;i
XMLHttpRequest.prototype.sendAsBinary = function(datastr,contentType) {
    var bb = new BlobBuilder();
    var len = datastr.length;
    var data = new Uint8Array(len);
    for (var i=0; i<len; i++) {
            data[i] = datastr.charCodeAt(i);
    }
    bb.append(data.buffer);
    this.send(bb.getBlob(contentType));
}