совместимость canvas.toBlob () в браузере MSEdge - PullRequest
0 голосов
/ 28 мая 2019

Я использую canvas.toBlob() метод обратного вызова для преобразования файла изображения в BLOB-объект. Но я вижу, что toBlob не совместим с браузером Microsoft.

Я попытался определить браузер и на основании браузера использую toBlob(). Для Edge у нас есть canvas.msToBlob(), а для других браузеров у нас есть canvas.toBlob(). Есть ли у нас какой-либо распространенный метод создания BLOB-объектов?

 let isEdgeBrowser = 
 msie\s|trident\/|edge\//i.test(window.navigator.userAgent);
    if (isEdgeBrowser) {
      let blob = canvas.msToBlob();
    }

   if (!isEdgeBrowser) {
      canvas.toBlob((blob) => {
        this.fileUploadedSize = blob.size;
      });
    }

1 Ответ

0 голосов
/ 28 мая 2019

Согласно этой статье , мы можем видеть, что метод HTMLCanvasElement.toBlob () не поддерживается Edge browser. Если вы хотите использовать этот метод в Edge browser, попробуйте добавить следующий polyfill:

if (!HTMLCanvasElement.prototype.toBlob) {
  Object.defineProperty(HTMLCanvasElement.prototype, 'toBlob', {
    value: function (callback, type, quality) {
      var dataURL = this.toDataURL(type, quality).split(',')[1];
      setTimeout(function() {

        var binStr = atob( dataURL ),
            len = binStr.length,
            arr = new Uint8Array(len);

        for (var i = 0; i < len; i++ ) {
          arr[i] = binStr.charCodeAt(i);
        }

        callback( new Blob( [arr], {type: type || 'image/png'} ) );

      });
    }
  });
}
...