Javascript 将.ics文件发送到webcal://而不是通过浏览器下载

Javascript 将.ics文件发送到webcal://而不是通过浏览器下载,javascript,icalendar,Javascript,Icalendar,我有一些代码使用ics.js框架,它使用fileSaver.js()创建日历邀请(.ics)并将其保存到用户浏览器中 通过测试/研究,我了解到移动浏览器不喜欢通过这种javascript下载机制下载文件,并尝试在浏览器中将其呈现为文本文件,而不是像桌面一样触发iOS/Android打开日历程序 我被告知在手机上打开这些文件的方法是将它们作为“webcal://”链接呈现给浏览器,指向我的.ics文件 那么,我如何劫持fileSaver.js的下载功能,并强制浏览器通过“webcal://myIn

我有一些代码使用ics.js框架,它使用fileSaver.js()创建日历邀请(.ics)并将其保存到用户浏览器中

通过测试/研究,我了解到移动浏览器不喜欢通过这种javascript下载机制下载文件,并尝试在浏览器中将其呈现为文本文件,而不是像桌面一样触发iOS/Android打开日历程序

我被告知在手机上打开这些文件的方法是将它们作为“webcal://”链接呈现给浏览器,指向我的.ics文件

那么,我如何劫持fileSaver.js的下载功能,并强制浏览器通过“webcal://myInvite.ics“要触发日历应用程序识别手机上的文件

尝试使用FileSaver.js中的URL保存方法,但无效:(

我还确保MIME类型已设置

ics.js
/**
*从filesave.js使用saveAs函数下载日历
*@param{string}文件名
*@param{string}文本扩展名
*/
“下载”:函数(文件名,外部){
如果(calendarEvents.length<1){
返回false;
}
ext=(typeof ext!=“未定义”)?ext:“.ics”;
文件名=(文件名的类型!=“未定义”)?文件名:'webcal://calendar';
var calendar=calendarStart+SEPARATOR+calendarEvents.join(SEPARATOR)+calendarEnd;
var-blob;
如果(navigator.userAgent.indexOf('MSIE 10')=-1){//chrome或firefox
blob=新blob([日历]);
blob=newblob([calendar],{type:'text/calendar;charset='+document.characterSet});
}否则{//ie
var bb=新的BlobBuilder();
bb.附加(日历);
blob=bb.getBlob('text/x-vCalendar;charset='+document.characterSet);
}
saveAs(“webcal://”,文件名+ext);
//另存为(blob,文件名+ext);
返回日历;
},
myApp.js
////////////////////////////////////////////
//集成电路发生器
///////////////////////////////////////////
const calForm=document.querySelector(“#add calForm”);
var el=document.getElementById('add-cal-form');
如果(el){
calForm.addEventListener('submit',(e)=>{
e、 预防默认值();
var-cal=ics();
cal.addEvent(“演示活动”、“这是一个全天活动”、“AK州诺姆”、“2019年7月8日”、“2019年7月8日”);
cal.addEvent(“演示活动”,“这是30分钟活动”,“诺姆,AK”,“2019年7月8日下午5:30”,“2019年7月8日下午6:00”);
下载();
});
}
如果我试图另存为URL(
saveAs(“webcal://”,filename+ext);
),我会遇到这个错误

Failed to execute 'createObjectURL' on 'URL': No function was found that matched the signature provided.
如果我使用默认的下载示例(
saveAs(blob,filename+ext);
),那么它可以在桌面上正常工作,在浏览器中生成下载。在移动设备上,它将下载文件并在浏览器中呈现为文本