Omgaan met mailto-links als er geen mailclient beschikbaar is
Wanneer een gebruiker op een link klikt die een mailto-link bevat, moet de webbrowser de standaard mailclient openen, zoals bepaald door het besturingssysteem. Tegenwoordig gebruiken gebruikers echter vaker webgebaseerde mailclients, zoals Gmail of Live Mail. Dit betekent dat er geen standaard mailclient aanwezig is in het besturingssysteem, of in ieder geval geen geconfigureerde. Dit geldt vooral voor Windows 7 en lager, waarop geen mailclient is geïnstalleerd. Het probleem is dat, als de gebruiker geen mailclient heeft geïnstalleerd, de browser niet weet wat hij met een mailto-link moet doen.
Een van onze klanten gebruikt een mailto-link voor bezoekers van hun platform om direct contact op te kunnen nemen met andere gebruikers op hun platform. Ze ontvingen enkele klachten over het feit dat deze link voor sommige gebruikers niet werkte. Nadat we hun exacte systeemconfiguratie hadden achterhaald, bleek dat deze gebruikers Chrome als browser gebruiken en Gmail als e-mailclient. Gmail biedt Chrome de mogelijkheid om mailto-links in een nieuw tabblad te openen, direct in de webinterface van Gmail, maar deze instelling wordt gemakkelijk genegeerd, zoals het geval was bij deze gebruiker.
We moesten met een oplossing komen, ook al denk ik dat dit eigenlijk een fout in de browser of in het besturingssysteem is. Gelukkig kunnen we met JavaScript vrij eenvoudig detecteren of er wel of niet op een link is gereageerd.
Wanneer een gebruiker op een mailto-link klikt, is het verwachte gedrag dat er een nieuw venster boven de browser wordt geopend, zodat een gebruiker de e-mail kan samenstellen. Dit betekent dat de focus op de mailwebsite verloren gaat. Hiermee kunnen we de 'blur' gebeurtenis op het huidige venster detecteren nadat een gebruiker op een link heeft geklikt. Als de gebruiker geen mailclient heeft geïnstalleerd, zal de browser niets doen, dus zal de blur event nooit worden aangeroepen. Dus wat we moeten doen is detecteren wanneer een gebruiker op een mailto-link klikt en dan onmiddellijk controleren op de 'blur' gebeurtenis. Als de 'blur' gebeurtenis niet plaatsvindt na, laten we zeggen, een halve seconde, dan kunnen we aannemen dat de browser niet heeft gereageerd en moeten we een alternatief zoeken (een formulier openen of zo).
De code:
(function($) { $('a[href^=mailto]').each(function() { var href = $(this).attr('href'); $(this).click(function() { var t; var self = $(this); $(window).blur(function() { // De browser heeft blijkbaar gereageerd, dus stop de time-out. clearTimeout(t); }); t = setTimeout(functie() { // De browser reageerde niet na 500ms, dus open een alternatieve URL. document.location.href = '...'; }, 500); }); }); })(jQuery);
