Javascript Canvas toBlob在safari中未被识别为函数
我可以使用下面的代码在Chrome和Firefox中下载图像,但在Safari中它抛出了以下错误: TypeError:“undefined”不是函数(计算“canvas.toBlob(blobCallback('wallperdeae'))”)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
我认为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'} ) );
});
}
});
}