Safari / Opera中的Blob构造函数无法工作?

4
我正在尝试从一个二进制字符串中构造一个Blob数组缓冲区。在Firefox和Chrome中运行良好,但是我不知道Safari和Opera出了什么问题。
这是我的问题的简化版本: http://plnkr.co/edit/sfEEHf?p=preview
// 1x1 red PNG pixle
base64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2P8z8DwHwAFBQIAHl6u2QAAAABJRU5ErkJggg==";
byteString = atob(base64);

// convert binary to array buff so we can construct a blob later
arrayBuffer = new ArrayBuffer(byteString.length);
intArray = new Uint8Array(arrayBuffer);

for (i = 0; i < byteString.length; i += 1) {
  intArray[i] = byteString.charCodeAt(i);
}

// construct blob
blob = new Blob([intArray], {type: "image/png"});
console.log(blob.size); // suppose to be 70 (its 19 in safari)

所使用的方法仅受FF/Chrome/IE10支持,请查看https://developer.mozilla.org/en-US/docs/JavaScript/Typed_arrays/DataView#Browser_compatibility以获取兼容性列表。 - Dr.Molle
1
你知道有什么解决方法吗?使用类型化数组对我来说有点新...我只想从二进制字符串转换为Blob。 - Endless
1个回答

11
在Safari中,您需要在TypedArray上使用'buffer'属性,即:

在Safari中,您需要在TypedArray上使用“buffer”属性,例如:

blob = new Blob([intArray.buffer], {type: "image/png"});

它会起作用的。


如果你的视图是缓冲区的一部分呢? - tantalor
1
对我来说不起作用...我正在使用它,没有第二个参数{type: "image/png"}。 - Ivan Kuckir
1
对我也没用。我正在使用Safari浏览器5.1.7,并使用上面提到的相同blob示例。 - Kunjan Shah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接