无法在分离的 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"})

this fiddle

中查看
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 将是 ArrayBufferbyteLength: 0,在这种情况下它是触发错误,因为在 data2.payload 传递到我的代码之前它在 web worker 中被修改,在为了避免在主线程和 web worker 之间复制片段,data2.payload 所有权转移给 worker。