gpt4 book ai didi

javascript - 将.ics文件转换到webcal://,而不是通过浏览器下载

转载 作者:行者123 更新时间:2023-11-30 06:13:34 24 4
gpt4 key购买 nike

我有一些使用ics.js框架的代码,该框架使用fileSaver.js(https://github.com/eligrey/FileSaver.js)来创建日历邀请(.ics)并将其保存到用户浏览器中。

通过测试/研究,我了解到移动浏览器不喜欢通过此javascript下载机制下载文件,并尝试在浏览器中将它们呈现为文本文件,而不是像台式机一样触发iOs / Android打开日历程序。

有人告诉我要在移动设备上打开这些文件的方法是,将它们作为“ webcal://”链接显示给浏览器,指向我的.ics文件。

那么,如何劫持fileSaver.js的下载功能,并强制浏览器通过“ webcal://myInvite.ics”加载该.ics blob /文件,以触发日历应用程序识别移动设备上的文件?

使用FileSaver.js中的URL保存方法尝试过,但它不起作用:(

https://github.com/eligrey/FileSaver.js#saving-urls

我还确保设置了MIME类型。

ics.js

/**
* Download calendar using the saveAs function from filesave.js
* @param {string} filename Filename
* @param {string} ext Extention
*/
'download': function (filename, ext) {
if (calendarEvents.length < 1) {
return false;
}

ext = (typeof ext !== 'undefined') ? ext : '.ics';
filename = (typeof filename !== 'undefined') ? filename : 'webcal://calendar';
var calendar = calendarStart + SEPARATOR + calendarEvents.join(SEPARATOR) + calendarEnd;

var blob;
if (navigator.userAgent.indexOf('MSIE 10') === -1) { // chrome or firefox
blob = new Blob([calendar]);
blob = new Blob([calendar], { type: 'text/calendar;charset=' + document.characterSet });
} else { // ie
var bb = new BlobBuilder();
bb.append(calendar);
blob = bb.getBlob('text/x-vCalendar;charset=' + document.characterSet);
}

saveAs("webcal://", filename + ext);
// saveAs(blob, filename + ext);

return calendar;
},



myApp.js

////////////////////////////////////////////
// ics generator
///////////////////////////////////////////
const calForm = document.querySelector('#add-cal-form');

var el = document.getElementById('add-cal-form');
if(el){

calForm.addEventListener('submit', (e) =>{
e.preventDefault();

var cal = ics();
cal.addEvent('Demo Event', 'This is an all day event', 'Nome, AK', '8/7/2019', '8/7/2019');
cal.addEvent('Demo Event', 'This is thirty minute event', 'Nome, AK', '8/7/2019 5:30 pm', '8/7/2019 6:00 pm');

cal.download();
});

}


如果我尝试另存为URL( saveAs("webcal://", filename + ext);),则会出现此错误

Failed to execute 'createObjectURL' on 'URL': No function was found that matched the signature provided.


如果我使用默认的下载示例( saveAs(blob, filename + ext);),那么它在桌面上会在浏览器中生成下载效果很好。在移动设备上,它将在浏览器中下载文件并将其显示为文本。

最佳答案

希望也能解决这个问题。

关于javascript - 将.ics文件转换到webcal://,而不是通过浏览器下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57410331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com