Hoe telefoonnummers markeren?

Ik wil een telefoonnummer markeren als een oproepbare link in een HTML-document. Ik heb de benadering van microformatsgelezen en ik weet dat de tel:-schema zou standaard zijn, maar wordt letterlijk nergens geïmplementeerd.

Skype definieert, voor zover ik weet, skype:en callto:, waarbij de laatste wat aan populariteit heeft gewonnen. Ik neem aan dat andere bedrijven andere schema’s hebben of op de callto:-trein stappen.

Wat is een goede gewoonte om een telefoonnummer te markeren, zodat zoveel mogelijk mensen met VoIP-software op een link kunnen klikken om gebeld te worden?

Bonusvraag: weet iemand iets over complicaties met alarmnummers zoals 911 in de VS of 110 in Duitsland?

Proost,

Update:Microsoft NetMeeting gebruikt callto:-schema’s onder WinXP. Deze vraagsuggereert dat Microsoft Office Communicator tel:schema’s maar niet callto:schema’s. Geweldig, Redmond!

Update 2:Nu tweeënhalf jaar later. Het lijkt erop neer te komen wat je met het nummer wilt doen. In mobiele context is tel:de juiste keuze. Als u zich richt op desktops, is het aan u of u denkt dat uw gebruikers meer Skype-mensen zijn (callto:) of dat er waarschijnlijk iets als Google Voice (tel:) is geïnstalleerd. Mijn persoonlijke mening is, gebruik bij twijfel tel:(in lijn met het antwoord van @Sidnicious).

Update 3:Gebruiker @rybo111 merkte op dat Skype in Chrome inmiddels op de tel:-trein is gesprongen. Ik kan dit niet verifiëren, want geen machine met beide bij de hand, maar als het waar is, betekent dit dat we hier eindelijk een winnaar hebben: tel:


Antwoord 1, autoriteit 100%

Het tel:-schema was gebruikt in de late jaren 1990en gedocumenteerd in het begin van 2000 met RFC 2806(die verouderd was door de meer diepgaande RFC 3966in 2004) en wordt nog steeds verbeterd. Het ondersteunen van tel:op de iPhone was geen willekeurige beslissing.

callto:, hoewel ondersteund door Skype, is geen standaarden moet worden vermeden, tenzij specifiek gericht op Skype-gebruikers.

Ik? Ik zou gewoon beginnen met het opnemen van correct gevormde tel:URI’s op uw pagina’s (zonder de user-agent te snuiven) en wachten tot de rest van de telefoons van de wereld dit inhaalt 🙂 .

Voorbeeld:

<a href="tel:+18475555555">1-847-555-5555</a>

Antwoord 2, autoriteit 14%

Mijn testresultaten:

callto:

  • Nokia Browser: er gebeurt niets
  • Google Chrome: vraagt Skype om het nummer te bellen
  • Firefox: vraagt om een programma te kiezen om het nummer te bellen
  • IE: vraagt Skype om het nummer te bellen

tel:

  • Nokia Browser: werkt
  • Google Chrome: er gebeurt niets
  • Firefox: “Firefox weet niet hoe deze url te openen”
  • IE: kan url niet vinden

Antwoord 3, autoriteit 9%

De beste gok is om te beginnen met tel: dat werkt op alle mobiele telefoons

Voer vervolgens deze code in, die alleen op een desktop wordt uitgevoerd en alleen wanneer op een link wordt geklikt.

Ik gebruik http://detectmobilebrowsers.com/om mobiele browsers te detecteren. U kunt elke gewenste methode gebruiken

if (!jQuery.browser.mobile) {
    jQuery('body').on('click', 'a[href^="tel:"]', function() {
            jQuery(this).attr('href', 
                jQuery(this).attr('href').replace(/^tel:/, 'callto:'));
    });
}

Dus in principe bedek je al je bases.

tel: werkt op alle telefoons om de kiezer met het nummer te openen

callto: werkt op uw computer om verbinding te maken met skype vanuit firefox, chrome


Antwoord 4, autoriteit 4%

Zoals je zou verwachten, strekt WebKit’s ondersteuning van tel:zich ook uit tot de mobiele Android-browser – ter informatie


Antwoord 5, autoriteit 2%

Ik bewaar dit antwoord voor “historische” doeleinden, maar raad het niet meer aan. Zie het antwoord van @Sidnicious hierboven en mijn update 2.

Aangezien het lijkt op een gelijkspel tussen callto en tel guys, wil ik een mogelijke oplossing inbrengen in de hoop dat je opmerkingen me weer op de weg naar het licht zullen brengen 😉

Met behulp van callto:, aangezien de meeste desktopclients dit aankunnen:

<a href="callto:0123456789">call me</a>

Als de client een iPhone is, vervang dan de links:

window.onload = function () {
  if (navigator.userAgent.match (/iPhone/i)) {
    var a = document.getElementsByTagName ("a");
    for (var i = 0; i < a.length; i++) {
      if (a[i].getAttribute ('href').search (/callto:/i) === 0) {
        a[i].setAttribute ('href', a[i].getAttribute ('href').replace (/^callto:/, "tel:"));
      }
    }
  }
};

Heeft u bezwaren tegen deze oplossing? Moet ik bij voorkeur starten vanaf tel:?


Antwoord 6, autoriteit 2%

Mobile Safari (iPhone & iPod Touch) gebruikt het tel:-schema.

Hoe bel ik een telefoonnummer vanaf een webpagina op iPhone?


Antwoord 7

RFC3966definieert de IETF-standaard URI voor telefoonnummers, dat is de ‘tel:’ URI . Dat is de standaard. Er is geen vergelijkbare standaard die ‘callto:’ specificeert, dat is een specifieke conventie voor Skype op platforms waar het is toegestaan een URI-handler te registreren om dit te ondersteunen.


Antwoord 8

dit werkte voor mij:

1.maak een standaardconforme link:

<a href="tel:1500100900">

2.vervang het wanneer de mobiele browser niet wordt gedetecteerd, voor Skype:

$("a.phone")
    .each(function()
{ 
  this.href = this.href.replace(/^tel/, 
     "callto");
});

Het selecteren van een link om te vervangen via klasse lijkt efficiënter.
Het werkt natuurlijk alleen op ankers met de klasse .phone.

Ik heb het in functie if( !isMobile() ) { ...gezet zodat het alleen wordt geactiveerd wanneer de desktopbrowser wordt gedetecteerd. Maar deze is waarschijnlijk verouderd…

function isMobile() {
    return (
        ( navigator.userAgent.indexOf( "iPhone" ) > -1 ) ||
        ( navigator.userAgent.indexOf( "iPod" ) > -1 ) ||
        ( navigator.userAgent.indexOf( "iPad" ) > -1 ) ||
        ( navigator.userAgent.indexOf( "Android" ) > -1 ) ||
        ( navigator.userAgent.indexOf( "webOS" ) > -1 )
    );
}

Antwoord 9

Ik heb tel:gebruikt voor mijn project.

Het werkte in Chrome, Firefox, IE9&8, Chrome mobiel en de mobiele browser op mijn Sony Ericsson-smartphone.

Maar callto:werkte niet in de mobiele browsers.


Antwoord 10

Ik zou tel:gebruiken (zoals aanbevolen). Maar om een betere fallback te hebben/foutpagina’s niet weer te geven, zou ik zoiets als dit gebruiken (met jQuery):

// enhance tel-links
$("a[href^='tel:']").each(function() {
    var target = "call-" + this.href.replace(/[^a-z0-9]*/gi, "");
    var link = this;
    // load in iframe to supress potential errors when protocol is not available
    $("body").append("<iframe name=\"" + target + "\" style=\"display: none\"></iframe>");
    link.target = target;
    // replace tel with callto on desktop browsers for skype fallback
    if (!navigator.userAgent.match(/(mobile)/gi)) {
        link.href = link.href.replace(/^tel:/, "callto:");
    }
});

De aanname is dat mobiele browsers die een mobiel stempel in de userAgent-string hebben, ondersteuning hebben voor het tel:protocol. Voor de rest vervangen we de link door het callto:protocol om terug te kunnen vallen op Skype indien beschikbaar.

Om foutpagina’s voor de niet-ondersteunde protocol(s) te onderdrukken, is de link getarget op een nieuw verborgen iframe.

Helaas lijkt het niet mogelijk om te controleren of de url succesvol is geladen in het iframe. Het lijkt erop dat er geen foutgebeurtenissen worden geactiveerd.


Antwoord 11

Aangezien callto:standaard wordt ondersteund door skype (ingesteld in Skype-instellingen), en anderen het ook ondersteunen, raad ik aan om callto:te gebruiken in plaats van skype:.


Antwoord 12

Hoewel Apple tel:aanbeveelt in hun documenten voor Mobile Safari, accepteert het momenteel (iOS 4.3) callto:toch. Daarom raad ik aan om callto:te gebruiken op een generieke website omdat het werkt met zowel Skype als iPhone en ik verwacht dat het ook op Android-telefoons zal werken.

Update (juni 2013)

Dit is nog steeds een kwestie van beslissen wat u wilt dat uw webpagina te bieden heeft. Op mijn websites geef ik zowel tel:als callto:links (de laatste aangeduid als zijnde voor Skype) aangezien desktopbrowsers op Mac niets doen met tel:links terwijl mobiel Android niets doet met callto:links. Zelfs Google Chrome met de Google Talk-plug-in reageert niet op tel:-links. Toch geef ik er de voorkeur aan beide links op de desktop aan te bieden voor het geval iemand de moeite heeft genomen om tel:links op hun computer te laten werken.

Als het ontwerp van de site dicteert dat ik slechts één link geef, zou ik een tel:-link gebruiken die ik zou proberen te veranderen in callto:in desktopbrowsers.


Antwoord 13

Gebruik jQuery om alle Amerikaanse telefoonnummers op de pagina te vervangen door de juiste callto:– of tel:-schema’s.

// create a hidden iframe to receive failed schemes
$('body').append('<iframe name="blackhole" style="display:none"></iframe>');
// decide which scheme to use
var scheme = (navigator.userAgent.match(/mobile/gi) ? 'tel:' : 'callto:');
// replace all on the page
$('article').each(function (i, article) {
    findAndReplaceDOMText(article, {
        find:/\b(\d\d\d-\d\d\d-\d\d\d\d)\b/g,
        replace:function (portion) {
            var a = document.createElement('a');
            a.className = 'telephone';
            a.href = scheme + portion.text.replace(/\D/g, '');
            a.textContent = portion.text;
            a.target = 'blackhole';
            return a;
        }
    });
});

Met dank aan @jonas_jonas voor het idee. Vereist de uitstekende findAndReplaceDOMText-functie.


Antwoord 14

Ik gebruik de normale <a href="tel:+123456">12 34 56</a>opmaak en maak die links niet-klikbaar voor desktopgebruikers via de pointer-events: none;

a[href^="tel:"] {
    text-decoration: none;
}
.no-touch a[href^="tel:"] {
    pointer-events: none;
    cursor: text;
}

voor browsers die geen pointer-events ondersteunen (IE < 11), kan de klik worden voorkomen met JavaScript (bijvoorbeeld afhankelijk van Modernizr en jQuery):

if(!Modernizr.touch) {
    $(document).on('click', '[href^="tel:"]', function(e) {
        e.preventDefault();
        return false;
    });
}

Other episodes