Javascript Canvas toBlob在safari中未被识别为函数

Javascript Canvas toBlob在safari中未被识别为函数,javascript,canvas,safari,html5-canvas,Javascript,Canvas,Safari,Html5 Canvas,我可以使用下面的代码在Chrome和Firefox中下载图像,但在Safari中它抛出了以下错误: TypeError:“undefined”不是函数(计算“canvas.toBlob(blobCallback('wallperdeae'))”) 我认为Safari不支持toBlob方法: 根据这一点,它仅在Chrome50+和Firefox(19+表示基本支持,25+表示图像质量参数)中可用,并且在IE10及以上版本中有一些基本支持 所以对Safari没有任何支持 编辑:根据2017年9月1

我可以使用下面的代码在Chrome和Firefox中下载图像,但在Safari中它抛出了以下错误:

TypeError:“undefined”不是函数(计算“canvas.toBlob(blobCallback('wallperdeae'))”)


我认为Safari不支持toBlob方法:

根据这一点,它仅在Chrome50+和Firefox(19+表示基本支持,25+表示图像质量参数)中可用,并且在IE10及以上版本中有一些基本支持

所以对Safari没有任何支持

编辑:根据2017年9月19日发布的Safari 11中为toBlob方法添加的参考URL支持

if(!htmlcanvaseelement.prototype.toBlob){
Object.defineProperty(htmlcanvaseElement.prototype,“toBlob”{
值:函数(回调、类型、质量){
var canvas=这个;
setTimeout(函数(){
var binStr=atob(canvas.toDataURL(type,quality).split(',')[1]),
len=binStr.长度,
arr=新的UINT8阵列(len);
对于(变量i=0;i
谢谢小迪比,您可以建议其他解决方法吗?这取决于您需要支持的浏览器版本,但您始终可以使用:作为浏览器中toBlob方法的多边形填充。另外,请选择此作为所选答案,如果对您有任何帮助,请投票支持。现在看来,Safari实际上提供了一些支持(根据引用的URL)。谢谢@TheSquareRoot,我在添加时添加了一个编辑语句。这在Edge中不起作用。它将错误从“非函数”更改为“预期函数”。但仍然不起作用。我还没有找到一种在edge中起作用的toBlob polyfill。有趣的是,这在我最近做的一项测试中在edge中起作用,所以可能自4月份以来发生了一些变化。
$("#save").click(function(){

   function blobCallback(iconName) {
        return function (b) {

            var a = document.getElementById('download');
            a.download = iconName + ".jpg";
            a.href = window.URL.createObjectURL(b);
        }
    }
    canvas.toBlob(blobCallback('wallpaperdeae'));

});
if (!HTMLCanvasElement.prototype.toBlob) {
  Object.defineProperty(HTMLCanvasElement.prototype, 'toBlob', {
    value: function (callback, type, quality) {
      var canvas = this;
      setTimeout(function() {

        var binStr = atob( canvas.toDataURL(type, quality).split(',')[1] ),
            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'} ) );

      });
    }
  });
}