Come contrassegnare i numeri di telefono?


471

Voglio contrassegnare un numero di telefono come link richiamabile in un documento HTML. Ho letto l'approccio dei microformati e so che lo tel:schema sarebbe standard, ma non è praticamente implementato da nessuna parte.

Skype definisce, per quanto ne so, skype:e callto:quest'ultimo ha guadagnato una certa popolarità. Presumo che le altre compagnie abbiano altri schemi o saltino sul callto:treno.

Quale sarebbe la migliore pratica per contrassegnare un numero di telefono, in modo che quante più persone possibili con il software VoIP possano semplicemente fare clic su un collegamento per ricevere una chiamata?

Domanda bonus: qualcuno è a conoscenza di complicazioni con numeri di emergenza come 911 negli Stati Uniti o 110 in Germania?

Saluti,

Aggiornamento: Microsoft NetMeeting accetta callto:schemi in WinXP. Questa domanda suggerisce che Microsoft Office Communicator gestirà gli tel:schemi ma non callto:quelli. Fantastico, Redmond!

Aggiornamento 2: due anni e mezzo dopo ora. Sembra ridursi a quello che vuoi fare con il numero. Nel contesto mobile, tel:è la strada da percorrere. Il targeting per desktop dipende da te, se pensi che i tuoi utenti siano più persone Skype ( callto:) o che molto probabilmente avrà installato qualcosa come Google Voice ( tel:). La mia opinione personale è, in caso di dubbio, usare tel:(in linea con la risposta di @Sidnicious).

Aggiornamento 3: l' utente @ rybo111 ha notato che nel frattempo Skype in Chrome è saltato sul tel:carrozzone. Non posso verificarlo, perché nessuna macchina con entrambi a portata di mano, ma se è vero, significa che finalmente abbiamo un vincitore qui:tel:


1
Sfortunatamente no. Sembra ridursi a ciò che fa il tuo provider (VoiP, cellulare o altro). Questo potrebbe anche essere in carica per 800 numeri.
Boldewyn,

1
Sto utilizzando Google Voice in Chrome e non riconosce gli tel:URI. Sto ancora attaccato callto:e visualizzo il numero di telefono sulla teoria secondo cui i browser dei telefoni cellulari dovrebbero comunque rilevare automaticamente il numero.
Vecchio professionista,

5
Nonostante il titolo, questa domanda è davvero "quale schema URL dovresti usare per i numeri di telefono", piuttosto che come contrassegnarli.
Raedwald,

1
@Boldewyn Skype viene richiesto quando si utilizza Chrome con tel:quindi forse dovresti rimuovere il tuo commento alla fine sull'utilizzo di Skype callto:?
Rybo111,

1
Potresti provare a modificare gli aggiornamenti delle domande nelle risposte corrispondenti. In questo modo è un po 'un casino.
idmean,

Risposte:


495

Lo tel:schema è stato utilizzato alla fine degli anni '90 e documentato all'inizio del 2000 con RFC 2806 (che è stato obsoleto dalla più completa RFC 3966 nel 2004) e continua a essere migliorato . Il supporto tel:su iPhone non è stata una decisione arbitraria.

callto:, sebbene supportato da Skype, non è uno standard e dovrebbe essere evitato a meno che non sia mirato specificamente agli utenti di Skype.

Me? Comincerei solo a includere tel:URI correttamente formati sulle tue pagine (senza annusare l'agente utente) e aspetterei che il resto dei telefoni del mondo raggiunga :).

Esempio :

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


Grazie per la risposta dettagliata! Da quando ho posto la domanda, sono stato tentato di seguire anche questo approccio. Utilizza lo standard e informa le persone che si lamentano che utilizzano l'app / lo strumento non validi. Anche se diventa difficile, se questo è il tuo cliente, penso che tu abbia ragione. Se comunque devo considerare gli utenti di Skype, andrò con la mia soluzione JavaScript al contrario.
Boldewyn,

1
È il 2014 e Tel: ora funziona per Skype. Ma se si desidera avviare una chiamata al servizio di test eco / suono Skype, il collegamento sarebbe <a href="skype:echo123?call"> Chiamare il servizio di test eco / suono Skype </a> da msdn.microsoft. com / en-us / library / office /…
OzBob

4
Qualcuno ha provato il href="tel://1-555-555-5555"formato? i ragazzi di Tutsplus lo raccomandano code.tutsplus.com/tutorials/…
Adrien Be

2
Nella mia esperienza con il tel: tag Skype richiede che il prefisso nazionale con un + sia sul numero (ad esempio "+44" per i numeri del Regno Unito) per analizzare correttamente il numero. Altrimenti apre solo Skype ma non prova a comporre il numero.
ShaunUK,

3
L'esempio non dovrebbe essere: <a href="tel:+18475555555">? Nota il + prima del primo 1.)
Stéphane

73

I miei risultati del test:

chiama a:

  • Nokia Browser: non succede nulla
  • Google Chrome: chiede di eseguire skype per chiamare il numero
  • Firefox: chiede di scegliere un programma per chiamare il numero
  • IE: chiede di eseguire skype per chiamare il numero

tel:

  • Nokia Browser: funzionante
  • Google Chrome: non succede nulla
  • Firefox: "Firefox non sa come aprire questo URL"
  • IE: impossibile trovare l'URL

2
Per aggiungere a questo, il comportamento è lo stesso per Google Chrome su Android 4.2.2 (Nexus 4). Avere la versione Android di Skype in esecuzione in background non fa nemmeno callto: i collegamenti funzionano. In breve, non puoi davvero usare callto: links se vuoi indirizzare i dispositivi mobili al momento.
aendrew

Ora su Chrome 35 ottieni questo popup
pec

In Chrome e Firefox (forse anche IE), puoi registrare un tuo servizio web per il tel:prefisso con registerProtocolHandler .
Ross Rogers,

Devi usare il numero di telefono + countrycode che funziona su Chrome. tel: i link non sembrano funzionare con Skype su Chrome senza + +
Stas Svishov,

Aggiornamento su OSX e Chrome: chiede di avviare Facetime.
Jules,

45

La scommessa migliore è iniziare con tel: che funziona su tutti i cellulari

Quindi inserire questo codice, che verrà eseguito solo su un desktop e solo quando si fa clic su un collegamento.

Sto usando http://detectmobilebrowsers.com/ per rilevare i browser mobili, puoi usare qualunque metodo tu preferisca

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

Quindi in pratica copri tutte le tue basi.

tel: funziona su tutti i telefoni per aprire il dialer con il numero

callto: funziona sul tuo computer per connettersi a Skype da Firefox, Chrome


Sì, questo - callto: non funziona affatto su Android (vedi il mio commento sulla risposta di Murat), e tel: non funziona davvero sul desktop. È sfortunato, davvero.
aendrew

1
Hmmm, purtroppo un veloce jsfiddle non sembra lasciare che funzioni neanche ... jsfiddle.net/tchalvakspam/gVZYt/3
Kzqai

Lavorando su Seamonkey 2.20 su Mac 10.8 inserisci sotto il <body <?php body_class(); ?>>codice il file header.php di un tema wordpress.
om01,

callto: didnot non ha funzionato per Chrome in Mac e la versione è aggiornata
Ujjwal,

Purtroppo questo è stato deprezzato in JQuery 1.9 jquery.com/upgrade-guide/1.9/#jquery-browser-removed
Casebash

21

Come ci si aspetterebbe, il supporto di WebKit si tel:estende anche al browser mobile Android - FYI


15
Sarebbe stato meglio come commento, ma va bene sapere comunque.
o0 '.

10

Conservo questa risposta per scopi "storici" ma non la consiglio più. Vedi la risposta @Sidnicious sopra e il mio aggiornamento 2.

Dal momento che sembra un pareggio tra callto e tel ragazzi, voglio gettare una possibile soluzione nella speranza, che i tuoi commenti mi riportino sulla via della luce ;-)

Usando callto:, poiché la maggior parte dei client desktop lo gestirà:

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

Quindi, se il client è un iPhone, sostituisci i collegamenti:

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:"));
      }
    }
  }
};

Qualche obiezione contro questa soluzione? Dovrei preferibilmente iniziare da tel:?


È possibile che l'iPhone supporti anche lo schema callto, ma che Apple preferisca tel, quindi è quello menzionato nella documentazione.
Jan Aagaard,

5
Vedi la mia risposta callto:è uno schema URI proprietario, quindi non vorrei iniziare da lì.
s4y,

callto: didnot non ha funzionato per Chrome in Mac e la versione è aggiornata.
Ujjwal,

Questo non mi sorprende. Il panorama era sostanzialmente diverso nel 2009, quando fu data la risposta. Inoltre, è necessario un programma di terze parti, che si registra per lo callto:schema, come Skype. Chrome stesso non ha idea di cosa dovrebbe fare.
Boldewyn,


3

RFC3966 definisce l'URI IETF standard per i numeri di telefono, ovvero l'URI "tel:". Questo è lo standard. Non esiste uno standard simile che specifichi "callto:", ovvero una convenzione particolare per Skype su piattaforme in cui è possibile registrare un gestore URI per supportarlo.


È quello che ha detto Sidnicious, sì.
Boldewyn,

3

questo ha funzionato per me:

1. creare un collegamento conforme agli standard:

        <a href="tel:1500100900">

2. sostituirlo quando il browser mobile non viene rilevato, per skype:

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

La selezione del collegamento da sostituire tramite la classe sembra più efficiente. Ovviamente funziona solo su ancore con .phoneclasse.

L'ho messo in funzione in if( !isMobile() ) { ...modo che si inneschi solo quando rileva il browser desktop. Ma questo è probabilmente obsoleto ...

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 )
    );
}

Il modo "corretto" per rilevare i browser mobili è verificare la stringa "mobile" senza distinzione tra maiuscole e minuscole.
Kevin Cox,

2

Ho usato tel:per il mio progetto.

Funzionava con Chrome, Firefox, IE9 e 8, Chrome mobile e il browser mobile sul mio smartphone Sony Ericsson.

Ma callto:non ha funzionato nei browser mobili.


2

Vorrei usare tel:(come raccomandato). Ma per avere un migliore fallback / non visualizzare le pagine di errore userei qualcosa del genere (usando 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:");
    }
});

Il presupposto è che i browser mobili che hanno un timbro mobile nella stringa UserAgent abbiano il supporto per il tel:protocollo. Per il resto sostituiamo il collegamento con il callto:protocollo per avere un fallback su Skype ove disponibile.

Per eliminare le pagine di errore per i protocolli non supportati, il collegamento è indirizzato a un nuovo iframe nascosto.

Sfortunatamente non sembra possibile verificare se l'URL è stato caricato correttamente nell'iframe. Sembra che non vengano generati eventi di errore.


Bel uso di iframe nascosti!
Boldewyn,

1

Poiché callto:per impostazione predefinita è supportato da skype (impostato nelle impostazioni di Skype) e anche altri lo supportano, consiglierei di utilizzare callto:anziché skype:.


3
Qui sono d'accordo. Ma tutti insieme sembra ridursi a tel: vs callto :, e non è facile.
Boldewyn,

1

Anche se Apple consiglia tel:nei suoi documenti per Mobile Safari, attualmente (iOS 4.3) accetta callto:lo stesso. Quindi consiglio di usarlo callto:su un sito Web generico poiché funziona sia con Skype che con iPhone e mi aspetto che funzioni anche su telefoni Android.

Aggiornamento (giugno 2013)

Si tratta ancora di decidere cosa vuoi che la tua pagina web offra. Sui miei siti web fornisco sia tel:e callto:collegamenti (quest'ultimo etichettato come per Skype) dal browser desktop su Mac non fanno nulla con tel:collegamenti mentre mobile Android non fa nulla con callto:i collegamenti. Anche Google Chrome con il plug-in di Google Talk non risponde ai tel:collegamenti. Tuttavia, preferisco offrire entrambi i collegamenti sul desktop nel caso in cui qualcuno abbia avuto il problema di far funzionare i tel:collegamenti sul proprio computer.

Se il design del sito richiedesse che fornissi un solo link, utilizzerei un tel:link che proverei a cambiare callto:sui browser desktop.


1
il browser stock nell'ultima build open source di Android "Ice Cream Sandwich" sembra ancora supportare tel:; cliccando su un callto:link si ottiene "Pagina Web non disponibile"
rymo

0

Utilizzando jQuery, sostituire tutti i numeri di telefono degli Stati Uniti sulla pagina con l'appropriato callto:o tel:schemi.

// 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;
        }
    });
});

Grazie a @jonas_jonas per l'idea. Richiede l'eccellente funzione findAndReplaceDOMText .


1
Questa soluzione non è l'ideale, poiché l'analisi della stringa dell'agente utente è considerata una cattiva pratica. Considera un dispositivo che supporta l' telURI ma non si segnala come dispositivo mobile.
Arturo Torres Sánchez,

-1

Uso il <a href="tel:+123456">12 34 56</a>markup normale e faccio in modo che quei link non siano cliccabili per gli utenti desktop tramitepointer-events: none;

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

per i browser che non supportano gli eventi puntatore (IE <11), il clic può essere impedito con JavaScript (l'esempio si basa su Modernizr e jQuery):

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

1
L'uso di Modernizr.touchquale supporto Touch Event per dedurre il supporto tel:è inaffidabile. Semplici casi di eccezione: iPad, tablet Windows, ecc.
Zachleat,

Anche Chrome in esecuzione su un desktop di Windows si segnala come un dispositivo touch.
Arturo Torres Sánchez,

Alcune macchine di classe desktop supportano tel: urls. Per un esempio specifico per Mac, FaceTime su Mac è standard e funziona con tel :, arrivando al punto di utilizzare l'iPhone dell'utente con Handoff / Continuity, quindi utilizzando eventi puntatore: nessuno per i desktop di destinazione potrebbe non essere più saggio .
OxC0FFEE,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.