我在应用上使用canvas.toBlob()
功能。在Firefox上工作正常。
使用铬时,功能失败。
我发现了这个问题: Which browsers (and versions) support the Canvas.toBlob method?
解决这个问题并要求浏览器支持此功能,但它已经过时了。
今天的状况如何?铬是唯一的还是其他浏览器仍然不支持它?
但最重要的是......有什么解决方法我可以使用???我的客户正在使用铬来测试应用程序...
答案 0 :(得分:1)
嗯,toBlob()
仍然受到支持。关于Chromium的原始受让人似乎不活跃,此问题似乎目前尚未重新分配(请参阅帖子中的link)。
解决方法是使用polyfill /垫片,例如 this one 。
上面相同链接的代码列出了这段代码(参见#57,由Adria提供):
if( !HTMLCanvasElement.prototype.toBlob ) {
Object.defineProperty( HTMLCanvasElement.prototype, 'toBlob', {
value: function( callback, type, quality ) {
const bin = atob( this.toDataURL( type, quality ).split(',')[1] ),
len = bin.length,
len32 = len >> 2,
a8 = new Uint8Array( len ),
a32 = new Uint32Array( a8.buffer, 0, len32 );
for( var i=0, j=0; i < len32; i++ ) {
a32[i] = bin.charCodeAt(j++) |
bin.charCodeAt(j++) << 8 |
bin.charCodeAt(j++) << 16 |
bin.charCodeAt(j++) << 24;
}
let tailLength = len & 3;
while( tailLength-- ) {
a8[ j ] = bin.charCodeAt(j++);
}
callback( new Blob( [a8], {'type': type || 'image/png'} ) );
}
});
}
(您可能需要在与ECMAScript不太相关的浏览器中将const
和let
替换为var
。