Javascript 无法在分离的ArrayBuffer上执行ArrayBuffer.prototype.slice

Javascript 无法在分离的ArrayBuffer上执行ArrayBuffer.prototype.slice,javascript,web-worker,arraybuffer,Javascript,Web Worker,Arraybuffer,我正在尝试使用.slice()从ArrayBuffer创建Blob,因为我需要复制ArrayBuffer,因为我知道它将来会被我无法控制/想要更改的代码更改(其bytellength将为0) new Blob([data2.payload.slice()], {type: "video/MP2T"}) 我得到了一个错误 Cannot perform ArrayBuffer.prototype.slice on a detached ArrayBuffer 在 在Windows7x64上 是否

我正在尝试使用
.slice()
ArrayBuffer
创建
Blob
,因为我需要复制
ArrayBuffer
,因为我知道它将来会被我无法控制/想要更改的代码更改(其
bytellength
将为0)

new Blob([data2.payload.slice()], {type: "video/MP2T"})
我得到了一个错误

Cannot perform ArrayBuffer.prototype.slice on a detached ArrayBuffer

在Windows7x64上

是否有其他方法可以复制
阵列缓冲区

看起来不错,但他们的多边形填充会产生错误

Source and destination must be ArrayBuffer instances
尝试使用
newblob([newuint8array(data2.payload.slice(0))],{type:“video/MP2T”})

从中看到它


这是我的错,我被不清楚的错误消息弄糊涂了,在这种情况下,由于在创建
Blob
数据2的那一刻,什么也做不了。有效载荷
已经通过tellength:0
拥有

而在通常情况下

var from = new ArrayBuffer(0);
var to = from.slice();
var to = from.slice(0);

to
ArrayBuffer
ByTeleLength:0
,在这种情况下是触发错误,因为在
data2.payload
传递到我的代码之前,它在web worker中被修改,以避免复制主线程和web worker之间的片段,
data2.有效负载
所有权转移给工作进程。

尝试过,结果相同。尝试使用UInt8Array创建Blob。这对我以前是有效的。尝试过之后,它现在不会复制
ArrayBuffer
。Naaa,并且在“1.让数字为TonNumber(参数)。[…]3.如果数字为NaN,则返回+0.”和
number(未定义)
返回
NaN
,因此
ToInteger
中的
+0
,以及
number(null)
返回
0
,因此,您也可以省略
slice(begin[,end])
begin
参数,它将默认为
0
。是的,我认为它应该默认为零。但我只能想到这两个原因,它们极有可能出错。引用得很好。@SenJacob
新数据视图(arrayBuffer)
不起作用,因为它实际上没有复制任何东西。它的ByTeleLength如何设置为0?啊,是的,可转移。。。忘了它,是的,它解释了你所有的错误。
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();
var from = new ArrayBuffer(0);
var to = from.slice();
var to = from.slice(0);