Ubuntu – Google Calendar as default handler of webcal protocol for iCal/ICS files

default-programsgoogle-calendar

I would like for Google Calendar to open URIs with the Webcal (wikipedia) scheme (delivering ICS files), similar to how Gmail can be set to be the default handler for mailto: links.

More specifically, I would like for Google Calendar to import them to my primary calendar. (You can manually import an ICS file in Google Calendar by clicking the small arrow next to Other calendars, choosing Import calendar from the drop-down list, navigating to the .ICS file, and choosing Import.)

I don't know if this is possible, but I'm hoping somebody will have a great idea.

Best Answer

Chromium

The chromium browser offers this option when you first log in to Google Calendar:

Google Calendar in Chromium browser offers to handle webcal protocols

If you have accidentally answered with No on this question, you can press the Wrench toolbar button and go to Settings. Click Show advanced settings, find Content settings... (just after Privacy header) and find the Manage handlers button. Click the X next to the ignored protocol you wish to delete. Alternatively, you can type in protocol handlers search box in Chromium settings.See the screenshot below.

Undo ignore protocol handler in Chromium browser

Firefox

I found this post on stackexchange which explains how to achieve the same thing in Firefox, but this doesn't work for me on firefox 12 and 15: this works for me if I disable the Never save history option (Private browsing mode):

Go to Google Calendar's site and press Ctrl+Shift+K.

Paste this after the > sign:

navigator.registerProtocolHandler("webcal","https://www.google.com/calendar/render?cid=%s","Google Calendar");

Press the enter key and click the Add application button which should appear below the toolbar.

Firefox console

Firefox accept protocol hanlder

You may need to toggle the gecko.handlerService.allowRegisterFromDifferentHost option in about:config to true before trying this (if google redirects you to a local google domain). Remember to return it to false after calling the registerProtocolHandler function because malicious sites may exploit this. See details here.