浏览器无法下载.eml文件,无需修改预设设置的解决方法有哪些?
解决方案
- 方案1:调整后缀导出为txt,无任何兼容性问题
不需要修改任何浏览器或系统设置,只需将下载文件名改为message.txt,在页面上添加简单提示:下载完成后手动将文件后缀从.txt修改为.eml即可被邮件客户端正常识别。 - 方案2:修改Blob为eml标准MIME类型
你当前代码使用的是text/plain作为Blob类型,改为eml的标准类型message/rfc822,可以降低部分浏览器的拦截概率。同时你现有代码中a标签嵌套button不符合HTML规范,可能触发异常的点击事件逻辑,建议直接给a标签添加按钮样式,去掉嵌套的button,也能降低被浏览器判定为异常下载的概率。
修改后完整代码如下:
<a download="message.eml" id="downloadlink" class="btn btn-primary" style="display: none">Download</a> <script> (function () { var textFile = null, makeTextFile = function (text) { // 改为eml标准MIME类型 var data = new Blob([text], {type: 'message/rfc822'}); if (textFile !== null) { window.URL.revokeObjectURL(textFile); } textFile = window.URL.createObjectURL(data); return textFile; }; var create = document.getElementById('create'), textbox = document.getElementById('textbox'); if(create){ create.addEventListener('click', function () { var link = document.getElementById('downloadlink'); link.href = makeTextFile(textbox.value); link.style.display = 'inline'; }, false); } else { console.log('no create') } })(); </script>
- 方案3:前端打包为zip后下载
浏览器对zip格式的下载拦截规则远宽松于eml,可以借助JSZip在前端将生成的eml内容打包为zip文件导出,用户下载后解压即可获得可用的eml文件。 - 方案4:服务端代理导出
若你的站点有后端服务,可将eml内容传到后端,由后端返回文件响应,配置正确的Content-Disposition: attachment; filename="message.eml"和Content-Type: message/rfc822响应头,比前端直接Blob导出的拦截概率低很多。
内容的提问来源于stack exchange,提问作者Akanksha_p
相关产品推荐
相关产品推荐

