Javascript-generated .ics file opens in Chrome and Firefox, but not in IE

Answering my own question:

The problem was not in the .ics output itself, rather it was in IE and Opera not treating the js-generated output as a file to download. To enforce such a download, is only possible from a server-side script.

I ended up recoding my logic to output the .ics file on the server-side, and by enforcing these headers:

header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: attachment; filename=cal.ics');

It was a painful restructuring, but now it works across browsers.


It appears there is a way to do this without using a server-side script. I answered a similar Stack Overflow question when I found this snippet that worked for me in the github issues for react-add-to-calendar:

var blob = new Blob([icsMSG], { type: 'text/calendar;charset=utf-8' });
window.navigator.msSaveOrOpenBlob(blob, 'download.ics');

This is working for me in Internet Explorer 11 without having to use a server to download the file.