2013-04-24 2 views
7

Was ist der zuverlässigste Weg zu erkennen, ob ein Benutzer eine physische Tastatur hat?HTML5; Vorhandensein von physischer Tastatur in Javascript erkennen

Eine Idee ist, dass, da es keine physische Tastatur window.onkeydownundefined (statt null) sein kann. Aber wegen der virtuellen Tastatur würde ich annehmen, dass dies nicht der Fall ist. Ich habe es nicht getestet.

Mein Ziel ist input[type='number'] eines Online Timer mit Radwählern ersetzt werden, wenn der Benutzer keine Tastatur hat.

+0

@Smiddty JavaScript könnte wahrscheinlich das Vorhandensein eines Screenreaders erkennen, was einen sehbehinderten Benutzer implizieren würde. –

Antwort

3

Ich sehe zwei Ansätze.

Der erste Ansatz wäre, jede Maus und Tastatur Ereignisse zu hören. Ein Benutzer mit einer Maus hat wahrscheinlich auch eine Tastatur. Ein Benutzer, der auf eine Website geht, bewegt wahrscheinlich die Maus. Der zweite Ansatz besteht darin, zu überprüfen, ob der Benutzeragent das Betriebssystem lesen kann, und davon auszugehen, dass die Android- und iOS-Geräte keine Tastatur besitzen. Für Windows 8 sehe ich nicht, wie der User Agent helfen könnte, da Windows 8 sowohl auf Tablets als auch auf Desktops/Notebooks läuft.

Ich hätte lieber eine elegantere Lösung.

1

ist es zuverlässiger, einen Touchscreen zu erkennen und das spezielle Widget dann zu zeigen; stellen Sie nur sicher, dass die Tastatur mit Ihrem ausgefallenen Widget für Barrierefreiheit noch verwendbar ist.

4

Dies wird sehr kompliziert mit Geräten wie dem Microsoft Surface, die mit einer Tastatur, Maus und einem Touchscreen ausgestattet sind. Und Sie können alle 3 Eingabemodi zu jedem beliebigen Zeitpunkt mischen oder eine andere Eingabemethode wie einen Stift hinzufügen.

Microsoft verwendet den Ansatz, Eingabeereignisse als "Zeigerereignisse" zu abstrahieren. Dieses Modell has been submitted to the W3C. Dies sollte Ihnen eine Vorstellung vom Trend bei der Verwaltung von Eingaben geben.

Immer noch finde ich es praktisch zu sehen, wenn die Berührung verfügbar ist und unter der Annahme, dass —, wenn es — ist, wird der Benutzer Touch-Eingabe zumindest einige der Zeit verwenden. Dies kann zu Designentscheidungen führen, um Dinge zu eliminieren, die völlig berührungsunfreundlich sind, obwohl dies eine Beeinträchtigung der Maus-/Tastaturfunktionalität bedeuten kann.

In Ihrem konkreten Fall würde ich mir genau überlegen, ob Sie nicht einmal input[type=number] durch ein benutzerdefiniertes Steuerelement ersetzen müssen. Die meisten Touch-Geräte sind einigermaßen modern und viele haben benutzerdefinierte, berührungsfreundliche Versionen der Standard-HTML-Eingaben.

Denken Sie auch an Zugänglichkeitsszenarien, die native Steuerelemente wahrscheinlich gut "out of the box" unterstützen.

Wenn Sie ein benutzerdefiniertes Steuerelement implementieren möchten, rate ich Ihnen, Berührungsfunktionen zu erkennen und Ihr benutzerdefiniertes Steuerelement anzuzeigen, ob andere Eingabemechanismen vorhanden sind oder nicht. Dies bedeutet, dass das benutzerdefinierte Steuerelement mindestens (Touch-/Tastatur-/Maus-freundlich) ist.

Hier ist mein aktueller Note-Test (mit dem Vermerk, dass es morgen brechen könnte und hat mit Sicherheit nicht auf jedem Gerät getestet):

var supportsTouch = ("ontouchstart" in window) || window.navigator.msMaxTouchPoints > 0; 
1

Sie in der Lage sein könnten, indem Sie das Betriebssystem den Tastaturtyp bestimmen oder sogar die Bildschirmmaße. Android, iOS und alle Geräte mit kleinen Bildschirmen haben meist keine physischen Tastaturen.