33 Stimmen

Können Sie mit JavaScript erkennen, ob ein Gerät über Telefonfunktionen verfügt (z. B. Anrufe tätigen/SMS senden)?

Gibt es eine Möglichkeit zu erkennen, ob ein Mobilgerät dazu in der Lage ist, Anrufe zu tätigen / SMS-Nachrichten zu senden?

Dies ist wichtig bei der Verwendung von tel: und sms: Links auf einer Webseite. Es reicht nicht aus, einfach nur ein Mobilgerät zu erkennen, da Tablets keine Anrufe tätigen können, iTouch keine Anrufe tätigen kann, usw.

Ich bin nicht an mobilen Erkennungstricks mit Gerätegröße, UA-String-Erkennung usw. interessiert. Ich möchte die Feature-Erkennung verwenden, um festzustellen, ob das Gerät in der Lage ist, Anrufe zu tätigen / SMS-Nachrichten zu senden. Ich würde eine universelle Lösung begrüßen, bin aber hauptsächlich an iOS / Android interessiert.

12voto

Paul Irish Punkte 44793

Ich habe keinen offensichtlichen Weg gesehen, um zu sehen, dass sms: und tel: Links eine besondere Behandlung erhalten.

Update: @janogosteve unten hat bestätigt, dass es derzeit kein zuverlässiges Feature-Detekt geben. Dies scheint nicht erkennbar zu sein.


Hier ist eine umfassende Möglichkeit, dieses Feature zu erkennen. (Lesen Sie den Kommentar von jangosteve unten!)

  • Erstellen Sie eine Testseite mit zwei dieser Links und einem regulären http-Link
  • Greifen Sie auf die Elemente zu und durchsuchen Sie dann alle ihre Eigenschaften, kopieren Sie alles in ein Objekt..
  • Holen Sie sich auch getComputedStyle Informationen für eine Vielzahl von Details über sie und werfen Sie sie ebenfalls in ein Objekt
  • JSON.stringify(das Zeug, sodass Sie später damit umgehen können)

Führen Sie das obige auf einem iOS-Gerät und in Desktop Safari/Chrome aus

Dann konvertieren Sie sie mit JSON.parse wieder in Objekte... und verwenden Sie https://github.com/NV/objectDiff.js, um zu sehen, ob Sie überhaupt Unterschiede erkennen können.

5voto

rwdsco Punkte 681

Ein neuer Handlungswendepunkt in diesem Problem (Stand Feb 2015) ist, dass viele Desktop-Browser jetzt die Click-to-Call-Funktion unterstützen, aber keine Telefonnummern automatisch erkennen.

Die raffinierten Tricks, mit denen man bisher die automatische Erkennung von Telefonnummern oder Touch-Fähigkeiten herausfinden konnte, sind nun obsolet.

Mac OSX unterstützt seit Yosemite 10.9.2 Click-to-Call mit Facetime-Audio, und Windows 8 / IE11 tut dasselbe mit Skype. Nicht sicher, ob Chrome OS (Hangouts?) dasselbe macht. iPads nutzen Facetime-Audioanrufe.

Es sieht so aus, als ob alle Webbrowser von nun an Click-to-Call unterstützen werden. Die Frage ist wirklich, wie man verhindern kann, dass Benutzer von älteren Browsern und Desktop-Betriebssystemen einen Fehler erhalten, wenn sie auf einen tel:-Link klicken.

Ich habe eine Javascript-Bibliothek erstellt, um zu versuchen, ältere Benutzer von Desktop-Betriebssystemen zu erkennen, die vor der tel:-Link-Unterstützung stehen, aber das erwies sich als sehr problematisch und kompliziert.

Derzeit ist mein Ansatz entweder:

  • A) Lassen Sie es als Link für alle Benutzer. Benutzer ohne einen anruffähigen Browser müssen einfach leiden.
  • B) Verwenden Sie ein Media Query, um das Link-Styling nur für Desktop-Browserbreiten auszublenden, in der Annahme, dass die meisten Desktop-Benutzer sowieso keine Anrufe von ihrem Desktop-PC aus tätigen werden.
  • C) Überspringen Sie das -Tag und Desktops ganz und lassen Sie die automatische Erkennung auf Mobilgeräten ihre magische Arbeit erledigen.

Ich bin von keiner dieser Lösungen begeistert, aber ich entscheide mich für B, bis sich das Browser-Unterstützungslandschaft in Zukunft ändert. Auf diese Weise habe ich Kontrolle über das -Tag, ein Desktop-Benutzer kann immer noch auf die Telefonnummer klicken, wenn er wirklich will, und ich kann in Zukunft problemlos wechseln.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X