JavaScript-фрагмент ArrayBuffer, по-видимому, сломанный в Safari 9.1.2

Основная функция JavaScript, похоже, нарушена в Safari 9.1.2 (10601.7.7). Возможно, я просто делаю что-то не так? Ищете советы о том, как работать в прошлом...

Эта функция ArrayBuffer.prototype.slice()

Вот пример использования, который отлично работает в Chrome и Firefox, но не в Safari.

var buffer = new ArrayBuffer(16);
var bufferView = new Uint8Array(buffer);
console.log(bufferView.slice(0,8)); // TypeError: bufferView.slice is not a function

Ответ 1

Я просто пишу это в качестве ответа, все соответствующие факты были в комментариях уже (таким образом, сообщество wiki).

Вы вызываете .slice() в объекте Uint8Array, а не на ArrayBuffer, а .slice() не поддерживается на типизированных массивах в Safari и Internet Explorer.

Вместо этого вы можете использовать bufferView.buffer.slice() или этот вспомогательный метод, написанный Patch:

if(!Uint8Array.prototype.slice)
{
    Uint8Array.prototype.slice = function(a,b){
        var Uint8ArraySlice = new Uint8Array(this.buffer.slice(a,b));
        return Uint8ArraySlice;
    }
}