使用img.onload事件加载base64图片的兼容问题

平时加载图片的方法


let img = new Image();
img.onload = () => {
    ...
}
img.src = '.....'

最近使用这种方式加载base64的图片,在ipone6 plus(ios9)中,base64的图片没有加载成功,而jpg 格式的照片可以成功加载

解决方案

  • 方案一:将base64转成file对象,让服务端返回一个http的图片链接

    • 优点:无兼容性问题
    • 缺点:多一次请求,且图片加载依赖网速
  • 方案二:将base64转成objectUrl

    • 优点:无网络请求
    • 缺点:兼容性,PC端慎用

objectUrl

  • 兼容性

    image.png
image.png
  • 相关代码
generateImgUrl(imgUrl, isCors = true) {
        return new Promise((resolve, reject) => {
            let img = new Image(),
                objectUrl = null;
            if (isCors) {
                img.setAttribute('crossOrigin', 'anonymous');
            }
            if (imgUrl.match(/^data:(.*);base64,/) && window.URL && URL.createObjectURL) {
                objectUrl = URL.createObjectURL(Tool._convertBase64ToBlob(imgUrl));
                imgUrl = objectUrl;
            }
            img.onload = () => {
                objectUrl && URL.revokeObjectURL(objectUrl);
                resolve(img);
            };
            img.onerror = err => {
                reject(err);
            };
            img.src = imgUrl;
        });
    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容