Canvas toBlob在safari中不被识别为函数
Canvas toBlob is not recognized as a function in safari
我可以在Chrome下载图像&Firefox使用下面的代码,但在Safari中,它会抛出这个错误:
TypeError: 'undefined'不是一个函数(求值'canvas.toBlob(blobCallback('wallpaperdeae'))')
$("#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'));
});
我认为Safari不支持toBlob方法:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob Browser_compatibility
根据这一点,它只能在Chrome 50+和Firefox(19+为基本支持,25+为图像质量参数)中使用,在IE 10及以上版本中有一些基本支持。
所以不支持Safari。
编辑:根据引用的URL支持在2017年9月19日发布的Safari 11中添加了toBlob方法
MDN上有一个"基于toDataURL
的低性能polyfill "
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'} ) );
});
}
});
}
相关文章:
- 无法识别从php创建的Js函数
- 函数无法识别初始化的变量
- jQuery选择器不识别任何动态创建的HTML输入函数
- PHP函数识别3个数字中最低的一个并更改其类
- 如何在javascript中识别函数的参数名称
- Jslint 无法识别错误排序函数的选项
- angular/javascript无法识别函数内部的全局变量
- 如何在Javascript(或Node)中识别函数的参数
- Javascript 无法识别函数中的变量
- InnerHTML onclick无法识别函数
- Chrome无法正确识别函数参数
- 如何识别函数是作为方法调用还是作为回调调用
- AngularJS无法识别函数
- JQuery,操作无法识别函数内部的变量
- Javascript-当使用createElement的东西调用js文件时,无法识别函数
- javascript setTimeout不能识别函数参数
- 在javascript中通过指针识别函数
- 使用Gulp时无法识别函数
- Javascript错误,无法识别函数.为什么
- 识别函数javascript的元素