You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS端Chrome中JavaScript实现canvas转图下载时指定文件名不生效问题求解

问题根因

iOS端Chrome基于WebKit内核构建,存在兼容性缺陷:不支持data:协议的URI搭配<a>标签download属性使用的场景,无法读取该场景下download属性指定的文件名,因此会默认生成名为document的无后缀文件。

兼容调整方案

将base64格式的dataURL转换为Blob对象,再通过URL.createObjectURL()生成临时本地地址使用,即可让download属性生效,具体实现代码如下:

var dataURL = capture.toDataURL('image/jpeg', 0.8);
// 将base64转换为Blob
var arr = dataURL.split(','), 
    mime = arr[0].match(/:(.*?);/)[1],
    bstr = atob(arr[1]), 
    n = bstr.length, 
    u8arr = new Uint8Array(n);
while(n--){
    u8arr[n] = bstr.charCodeAt(n);
}
var blob = new Blob([u8arr], {type: mime});
// 生成临时URL并触发下载
var link = document.createElement("a");
link.href = URL.createObjectURL(blob);
link.download = "elfie.jpg";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
// 释放临时URL资源
setTimeout(() => URL.revokeObjectURL(link.href), 1000);
注意事项
  • 临时生成的Object URL需要手动调用URL.revokeObjectURL()释放,避免占用内存资源
  • 该方案兼容所有主流移动端、桌面端浏览器,原有其他平台的正常下载逻辑不会受影响

内容的提问来源于stack exchange,提问作者Sean Clark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:54:08