wake-up-neo.com

Wie markiere ich Telefonnummern?

Ich möchte eine Telefonnummer als anrufbaren Link in einem HTML-Dokument kennzeichnen. Ich habe gelesen der Mikroformat-Ansatz , und ich weiß, dass das Schema tel: Standard wäre, aber buchstäblich nirgends implementiert ist.

Skype definiert, soweit ich weiß, skype: und callto:, wobei letztere eine gewisse Popularität erlangt haben. Ich gehe davon aus, dass andere Firmen entweder andere Pläne haben oder in den callto: Zug einsteigen.

Was wäre eine bewährte Methode, um eine Telefonnummer zu kennzeichnen, damit so viele Leute wie möglich mit VoIP-Software einfach auf einen Link klicken können, um einen Anruf zu erhalten?

Bonusfrage: Kennt jemand Komplikationen mit Notrufnummern wie 911 in den USA oder 110 in Deutschland?

Prost,

Update: Microsoft NetMeeting verwendet unter WinXP callto: Schemata. Diese Frage legt nahe, dass Microsoft Office Communicator tel:-Schemata, jedoch keine callto:-Schemata verarbeitet. Großartig, Redmond!

Update 2: Zweieinhalb Jahre später. Es scheint sich darauf zu beschränken, was Sie mit der Nummer machen wollen. Im mobilen Kontext ist tel: der richtige Weg. Das Targeting von Desktops liegt an Ihnen, wenn Sie der Meinung sind, dass Ihre Benutzer mehr Skype-Nutzer sind (callto:) oder wahrscheinlich Google Voice (tel:) installiert haben. Meine persönliche Meinung ist, wenn Sie Zweifel haben, benutzen Sie tel: (in Übereinstimmung mit @Sidnicious 'Antwort).

Update 3: User @ rybo111 merkte an, dass Skype in Chrome inzwischen auf den tel: Zug gesprungen ist. Ich kann das nicht verifizieren, weil keine Maschine mit beiden zur Hand ist, aber wenn es wahr ist, bedeutet es, dass wir hier endlich einen Gewinner haben:

                                        tel:
449
Boldewyn

Das Schema tel: wurde in den späten 1990er Jahren verwendet und Anfang 2000 mit RFC 2806 (das durch das gründlichere RFC 3966) überholt wurde) dokumentiert in 2004) und wird weiter verbessert . Die Unterstützung von tel: auf dem iPhone war keine willkürliche Entscheidung.

callto:, obwohl von Skype unterstützt, ist kein Standard und sollte vermieden werden, es sei denn, es richtet sich speziell an Skype-Benutzer.

Mich? Ich fange einfach an, korrekt geformte tel: URIs in Ihre Seiten aufzunehmen (ohne den Benutzeragenten zu schnüffeln) und warte, bis die restlichen Telefone der Welt aufholen :).

Beispiel :

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

Meine Testergebnisse:

callto:

  • Nokia Browser: nichts passiert
  • Google Chrome: Bittet Sie, Skype auszuführen, um die Nummer anzurufen
  • Firefox: fragt nach einem Programm zum Anrufen der Nummer
  • IE: fragt nach Skype, um die Nummer anzurufen

tel:

  • Nokia Browser: funktioniert
  • Google Chrome: nichts passiert
  • Firefox: "Firefox kann diese URL nicht öffnen"
  • IE: URL konnte nicht gefunden werden
73
Murat

Am besten fangen Sie mit tel: an, das auf allen Handys funktioniert

Geben Sie dann diesen Code ein, der nur auf einem Desktop und nur dann ausgeführt wird, wenn auf einen Link geklickt wird.

Ich benutze http://detectmobilebrowsers.com/ um mobile Browser zu erkennen, können Sie jede Methode verwenden, die Sie bevorzugen

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

Sie decken also im Grunde alle Ihre Grundlagen ab.

tel: Funktioniert auf allen Telefonen, um den Dialer mit der Nummer zu öffnen

callto: Arbeitet auf Ihrem Computer, um eine Verbindung zu Skype von Firefox, Chrome herzustellen

44
mordy

Wie zu erwarten ist, erstreckt sich die Unterstützung von tel: durch WebKit auch auf den Android mobilen Browser - zu Ihrer Information

21
rymo

Ich behalte diese Antwort für "historische" Zwecke, empfehle sie aber nicht mehr. Siehe @Sidnicious 'Antwort oben und mein Update 2.

Da es wie ein Unentschieden zwischen callto und tel aussieht, möchte ich eine mögliche Lösung in die Hoffnung werfen, dass Ihre Kommentare mich wieder auf den Weg des Lichts bringen ;-)

Mit callto:, da die meisten Desktop-Clients damit umgehen:

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

Wenn der Client ein iPhone ist, ersetzen Sie die 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:"));
      }
    }
  }
};

Haben Sie Einwände gegen diese Lösung? Soll ich am besten von tel: ausgehen?

10
Boldewyn

Mobile Safari (iPhone & iPod Touch) verwendet das Schema tel:.

Wie wähle ich eine Telefonnummer von einer Webseite auf dem iPhone?

8
Jan Aagaard

das hat bei mir geklappt:

1.Stellen Sie einen standardkonformen Link her:

        <a href="tel:1500100900"> 

2. Ersetzen Sie es, wenn der mobile Browser nicht erkannt wird, für Skype:

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

Das Auswählen eines Links zum Ersetzen durch eine Klasse scheint effizienter zu sein. Natürlich funktioniert es nur bei Ankern mit der Klasse .phone.

Ich habe es in die Funktion if( !isMobile() ) { ... gestellt, so dass es nur ausgelöst wird, wenn der Desktop-Browser erkannt wird. Aber dieser ist wahrscheinlich veraltet ...

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

RFC3966 definiert den IETF-Standard-URI für Telefonnummern, dh den URI 'tel:'. Das ist der Standard. Es gibt keinen ähnlichen Standard, der 'callto:' spezifiziert. Dies ist eine spezielle Konvention für Skype auf Plattformen, auf denen ein URI-Handler registriert werden kann, um dies zu unterstützen.

3
Leroy Jenkins

Ich würde tel: verwenden (wie empfohlen). Aber um ein besseres Fallback zu haben/keine Fehlerseiten anzuzeigen, würde ich so etwas verwenden (mit 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:");
    }
});

Die Annahme ist, dass mobile Browser, die einen mobilen Stempel in der Zeichenfolge userAgent haben, das Protokoll tel: unterstützen. Im Übrigen ersetzen wir den Link durch das callto: -Protokoll, um einen Fallback auf Skype zu erhalten, sofern verfügbar.

Um Fehlerseiten für die nicht unterstützten Protokolle zu unterdrücken, wird der Link auf einen neuen versteckten Iframe gerichtet.

Leider scheint es nicht möglich zu sein, zu überprüfen, ob die URL erfolgreich in den iframe geladen wurde. Es scheint, dass keine Fehlerereignisse ausgelöst werden.

2
jonas_jonas

Ich habe tel: für mein Projekt verwendet.

Es funktionierte in Chrome, Firefox, IE9 & 8, Chrome Mobile und im mobilen Browser auf meinem Sony Ericsson-Smartphone.

Aber callto: funktionierte nicht in den mobilen Browsern.

2
fuma

Da callto: standardmäßig von Skype unterstützt wird (in den Skype-Einstellungen eingerichtet) und dies auch von anderen unterstützt wird, würde ich die Verwendung von callto: anstelle von skype: empfehlen.

1
awe

Obwohl Apple in seinen Dokumenten für Mobile Safari tel: empfiehlt, akzeptiert es derzeit (iOS 4.3) callto: genauso. Ich empfehle daher, callto: auf einer allgemeinen Website zu verwenden, da dies sowohl mit Skype als auch mit iPhone funktioniert, und ich gehe davon aus, dass dies auch auf Android Handys funktioniert.

Update (Juni 2013)

Hier müssen Sie noch entscheiden, was Sie auf Ihrer Webseite anbieten möchten. Auf meinen Websites stelle ich sowohl tel: als auch callto: Links (letzteres als für Skype gekennzeichnet) bereit, da Desktop-Browser auf Macs mit tel: Links nichts tun, während sie mobil Android macht nichts mit callto: Links. Selbst Google Chrome mit dem Google Talk-Plugin reagiert nicht auf tel: -Links. Dennoch bevorzuge ich es, beide Links auf dem Desktop anzubieten, falls jemand sich die Mühe gemacht hat, tel: Links für die Arbeit auf seinem Computer zu bekommen.

Wenn das Site-Design vorschreibt, dass ich nur einen Link zur Verfügung stelle, würde ich einen tel: -Link verwenden, den ich in Desktop-Browsern zu callto: ändern würde.

1
Old Pro

Ersetzen Sie mit jQuery alle US-Telefonnummern auf der Seite durch die entsprechenden Schemata callto: oder tel:.

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

Danke an @jonas_jonas für die Idee. Benötigt die Funktion excellent findAndReplaceDOMText .

0
bishop