[英]File not downloading with BLOB object in iphone chrome browser
[英]Downloading VCF file on iPhone browser
我正在尝试在我的移动 web 应用程序中下载一个 vcf 文件,而不访问服务器。
function downloadVcf(filename, data) {
var element = document.createElement('a');
element.setAttribute('href', 'data:text/x-vcard;charset=utf-8,' + encodeURIComponent(data));
element.setAttribute('download', filename);
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
}
上面的代码在使用 windows OS 的 chrome 浏览器上调试时运行良好。 它在 android 手机上的 chrome 浏览器上也能正常工作。 但它不适用于 iPhone 浏览器 (safari)。 它不是下载 vcf 文件,而是在浏览器中打开 VCF 文件。 但它确实可以让用户将其导入其他应用程序(例如联系人)。 但我想要的是在用户的 iPhone 中下载 VCF 文件。
请帮忙。
将document.location.href
设置为数据URI的值应该可以:
function downloadVcf(data) {
// build data url
var url = 'data:text/x-vcard;charset=utf-8,' + encodeURIComponent(data);
// ask the browser to download it
document.location.href = url;
}
从vCard Specification 4开始,不建议使用mime类型的text / x-vcard。 仅哑剧类型的text / vcard(无x-)有效。 检查iOS浏览器是否由于数据URL开头的mime类型而失败。
对我来说,它是这样工作的:(Chrome、Firefox、Edge、Android 和 Iphone)
var name = $('.people-name').text().replace(/\s+/g, '-').toLowerCase();
var vcard = vcard_begin+name+cel+tel+address+email+image+vcard_end;
// Create vcard content on variables
/*
Exemple:
var email = 'item1.EMAIL;type=email;type=work,pref:'+ mails + '\nitem1.X-ABLabel:Email\n';
*/
var filename = name + '.vcf';
var myFile = new File([vcard], filename, {type: "text/vcard;charset=utf-8"});
$(".vcard-download").on("click", function () {
saveAs(myFile);
}
和 HTML
<span class="vcard-download">Save my vcard</span>
接受的答案不适用于下载具有特定文件名的文件
function downloadVcf(filename){
var vcfString="BEGIN:VCARD\nVERSION:3.0\nREV:2022-12-30T05:56:13Z\nN;CHARSET=utf-8:sifr software\nEMAIL;INTERNET:masoomsanadi@yahoo.co.uk\nTEL:+91 9960706060\nADR:kolhapur, maharashtra, india\nEND:VCARD";
var blob = new Blob([vcfString], {type: 'text/x-vcard'});
var downloadUrl = URL.createObjectURL(blob);
var a = document.createElement("a");
a.href = downloadUrl;
a.download = filename+".vcf";
document.body.appendChild(a);
a.click();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.