Currently, registerProtcolHandler works like this:

navigator.registerProtocolHandler("protocol", "http://example.org/?uri=%s";, "title");

However, this doesn't allow the site to specify some useful and important information about the site like:

1. What encoding the server expects. For example, uri= might expect the protocol link that was invoked in the browser to be interpreted as koi8-r instead of utf-8. This might be the case even if the page that uses registerProtocolHandler uses Windows-1251 for example.

2. The location of an icon like a favicon.ico file or png etc.

3. URI to a help page where the site explains how it makes uses of registerProtocolHandler and gives help and support contacts etc.

4. Whether to use "POST" instead of GET.

For #1, if the UA knows this, it can automatically make sure the data goes out to the server in the right encoding.

For #2, if the UA knows this, it can automatically provide the desired icon in its UI next to each entry in its protocol configuration dialog, for example.

For #3, if the UA knows this, it can automatically provide a site support link in its configuration dialog.

For #4, if the site would rather (or can only) accept POST data (to support longer data for example), then the UA can automatically oblige.

With that said, it'd be great if registerProtocolHandler supported a 4th argument that was an object of informative things.

For example, here are some things that could be supported:

var info = {
    "accept-charset" : "koi8-r",
    "icon" : "http://example.org/some_dir/favicon.ico";,
    "help" : "http://example.org/support/protocol_handling.html";,
    "requestMethod" : "POST"
};

navigator.registerProtocolHandler("protocol", "http://example.org/?uri=%s";, "title", info);

Or, if you'd rather not use an object and just have more arguments:

navigator.registerProtocolHandler(
    "protocol",
    "http://example.org/?uri=%s";,
    "title",
    "koi8-r",
    "http://example.org/some_dir/favicon.ico";,
    "http://example.org/support/protocol_handling.html";,
    "post"
);

Now, if you noticed, I used "automatically" above. This is because I think it would not be ideal to have a site register itself to handle a protocol only to have it not work by default and have the user find some page on the site that tells them how to manually configure options in each browser just to get things working.

To give an example, Opera supports registering certain webmails with "mailto". You currently have to edit an ini file to add more than the default and Opera doesn't support registerProtocolHandler yet, but what Opera does support is specifying an icon URI that gets used in the UI.

Opera also only supports GET at the moment and only supports emitting utf-8, but there are a few sites where POST and a different output encoding are desired by the webmail. For example, mail.ru would rather have POST being used and they only accepted koi8-r (and Windows-1251 as an option) up until recently.

With that said, if Opera supported registerProtocolHandler to add a protocol handler (mailto for example), having the site be able to specify an icon could be usable by Opera and other UAs.

If Opera ever supports using POST or emitting a different encoding, having the site say so would help so the user doesn't have to manually find out and configure all this stuff.

Now, Firefox supports registerProtocolHandler for adding handlers now. But, you can't configure post/get or icons etc. either. But, if you could, it'd be great to have the site say what to use. (You also have to use an about:config override to make handler work on any domain)

Finally, it's unfortunate that registerProtocolHandler can't optionally support a custom format string for the second argument and a format argument that's a function that gets the URI the user clicked on passed to it. It's also unfortunate that it's so domain restricted. That's a good default, but you can see that Firefox has an override for a reason.

For example, all of these webmails don't support what registerProtocolHandler emits. They only support individual values, which are different for each webmail.

"http://mymail.operamail.com/scripts/mail/Outblaze.mail?compose=1&did=1&a=1&to=&subject=&body=&cc=&bcc=";
"http://mail.live.com/mail/EditMessageLight.aspx?n=&to=&cc=&bcc=&subject=&body=";
"http://compose.mail.yahoo.com/?To=&Subj=&Cc=&Bcc=&Body=";
"http://your_squirrelmail_server.com/src/compose.php?send_to=&subject=&body=&send_to_cc=&send_to_bcc=";
"http://your_horde_server.com/horde/imp/compose.php?popup=0&to=&cc=&msg=&subject=&bcc=";
"http://mail01.mail.com/scripts/mail/Outblaze.mail?composeto=&subject=&body=&cc=&bcc=&compose=1";
"http://win.mail.ru/cgi-bin/sentmsg?To=&CC=&BCC=&Subject=&BodyUTF8=&accel=1";
"http://your_roundcubemail_server/?_task=mail&_action=compose&_to=&_subject=&_body=&_cc=&_bcc=";

In these cases, the URI format string in registerProtocolHandler would need a %key for to, subject, body, cc and bcc. The site could use %t, %j, %k and %l and %m for these for example. But, for the UA to understand those %keys (since the UA would only understands %s), a custom function would be needed that did the processing on the link the user clicked and returned the URI argument with the %keys replaced with the desired values.

So, what this means is that registerProtocolHandler is currently insufficient for a lot of webmails and will cause the webmails to have to change processing and do more processing on the server to support it (instead of just percent-decoding some values, they'll now have to percent-decode a whole URI, parse it and then percent-decode the individual values gotten). I believe this will make adoption of registerProtocolHandler way slower.

Further, for webmails that decide to never support what registerProtocolHandler emits in any way, it'd be nice if a user could insert a script (from a community wiki that provides it for example) that uses registerProtocolHandler with a custom format function that allows things to be automatically set up for that webmail anyway into the site's page.

Point being, registerProtocolHandler needs to be more robust. And, although this post is long, the requested additions are quite simple to specify.

Maybe these things can be supported in registerProtocolHandler v.02 once sites like the above prove that they are needed.

--
Michael

Reply via email to