无法在分离的 ArrayBuffer 上执行 ArrayBuffer.prototype.slice
Cannot perform ArrayBuffer.prototype.slice on a detached ArrayBuffer
我正在尝试使用 .slice()
从 ArrayBuffer
创建 Blob
,因为我需要复制 ArrayBuffer
因为我知道它将来会更改(它的byteLength
将是 0) 我没有 control/want 可以更改的代码。
new Blob([data2.payload.slice()], {type: "video/MP2T"})
然后出现错误
Cannot perform ArrayBuffer.prototype.slice on a detached ArrayBuffer
在
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
在 Windows 7 x64.
还有其他方法可以复制ArrayBuffer
吗?
This way not does actual copy, other ways does not seems to be pretty straightforward.
ArrayBuffer.transfer() 看起来不错,但是他们的 polyfill 会产生错误
Source and destination must be ArrayBuffer instances
尝试使用 new Blob([new Uint8Array(data2.payload.slice(0))], {type: "video/MP2T"})
中查看
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://fiddle.jshell.net/img/logo.png", true);
xhr.responseType = "arraybuffer";
xhr.onload = function(e) {
var binaryArray = new Uint8Array(this.response.slice(0)); // use UInt8Array for binary
var blob = new Blob([binaryArray], { type: "image/png" });
var URL = window.URL || window.webkitURL;
var imageUrl = URL.createObjectURL(blob); // create url
document.getElementById("image").src = imageUrl;
};
xhr.send();
这是我的错,我一直被不清楚的错误信息弄糊涂了,在这种情况下什么也做不了,因为在 Blob
创建 data2.payload
的时候已经有 byteLength: 0
。
而在通常情况下
var from = new ArrayBuffer(0);
var to = from.slice();
var to = from.slice(0);
to
将是 ArrayBuffer
和 byteLength: 0
,在这种情况下它是触发错误,因为在 data2.payload
传递到我的代码之前它在 web worker 中被修改,在为了避免在主线程和 web worker 之间复制片段,data2.payload
所有权转移给 worker。
我正在尝试使用 .slice()
从 ArrayBuffer
创建 Blob
,因为我需要复制 ArrayBuffer
因为我知道它将来会更改(它的byteLength
将是 0) 我没有 control/want 可以更改的代码。
new Blob([data2.payload.slice()], {type: "video/MP2T"})
然后出现错误
Cannot perform ArrayBuffer.prototype.slice on a detached ArrayBuffer
在
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
在 Windows 7 x64.
还有其他方法可以复制ArrayBuffer
吗?
This way not does actual copy, other ways does not seems to be pretty straightforward.
ArrayBuffer.transfer() 看起来不错,但是他们的 polyfill 会产生错误
Source and destination must be ArrayBuffer instances
尝试使用 new Blob([new Uint8Array(data2.payload.slice(0))], {type: "video/MP2T"})
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://fiddle.jshell.net/img/logo.png", true);
xhr.responseType = "arraybuffer";
xhr.onload = function(e) {
var binaryArray = new Uint8Array(this.response.slice(0)); // use UInt8Array for binary
var blob = new Blob([binaryArray], { type: "image/png" });
var URL = window.URL || window.webkitURL;
var imageUrl = URL.createObjectURL(blob); // create url
document.getElementById("image").src = imageUrl;
};
xhr.send();
这是我的错,我一直被不清楚的错误信息弄糊涂了,在这种情况下什么也做不了,因为在 Blob
创建 data2.payload
的时候已经有 byteLength: 0
。
而在通常情况下
var from = new ArrayBuffer(0);
var to = from.slice();
var to = from.slice(0);
to
将是 ArrayBuffer
和 byteLength: 0
,在这种情况下它是触发错误,因为在 data2.payload
传递到我的代码之前它在 web worker 中被修改,在为了避免在主线程和 web worker 之间复制片段,data2.payload
所有权转移给 worker。