Wie erkenne ich Buggy-Verhalten im "input" -Ereignis ohne Browser-Erkennung?

8

Ich werde mit der Frage beginnen. Wenn ein bestimmter Browser eine fehlerhafte Implementierung einer Funktion aufweist und Ihr JavaScript wissen muss, ob der aktuelle Browser diese fehlerhafte Implementierung hat oder nicht, so dass er eine alternative Strategie verwenden kann, wie finden Sie heraus, ob die Implementierung fehlerfrei ist, ohne das Browser-Sniffing durchzuführen? (was allgemein als schlecht gilt)?

Hier ist die ganze Situation.

Ich habe an Code gearbeitet, der das Ereignis "input" verwenden möchte um Benachrichtigungen über Benutzeränderungen an ein <input type="text"> -Feld zu senden (funktioniert viel mehr live als das "change" -Ereignis), aber wenn dieses Ereignis nicht unterstützt wird, verwendet es ein viel komplizierteres Schema, das eine Reihe anderer Ereignisse beinhaltet.

Da das "input" -Ereignis nur in einigen Browsern unterstützt wird, suchte ich nach einer Möglichkeit, die Feature-Erkennung für das Ereignis durchzuführen (statt des Browser-User-Agent-Sniffing), da Feature-Erkennung im Allgemeinen eine robustere Methode ist . Als solcher stieß ich auf diesen großartigen Artikel , um genau das zu tun und dieser Code scheint zu funktionieren :

%Vor%

Dann stieß ich auf Probleme mit IE (Überraschung, Überraschung). Während IE vorgibt, das "Eingabe" -Ereignis zu unterstützen, und es den Feature-Test oben übersteht, und es die meiste Zeit funktioniert, ist die Unterstützung von IE buggy wie Hölle. Es löst das Ereignis nicht einmal aus, wenn der Benutzer die Rücktaste (neben anderen fehlenden Verhaltensweisen) drückt. Daher kann ich mich im IE nicht darauf verlassen. Also, ich hatte diesen netten sauberen Code erstellt, der einen Feature-Test für das "input" -Ereignis durchgeführt hat, und verwendet seine sehr saubere Implementierung, wenn vorhanden und wenn nicht vorhanden, nutzte diese viel hässlichere Arbeit die Überwachung von acht anderen Ereignissen. Jetzt ist es im IE kaputt, weil der Feature-Test für das "Eingabe" -Ereignis besteht, also versucht der Code, es zu benutzen, aber es ist buggy wie Hölle, also funktioniert es nicht.

Da diese IE-Bugs bei Benutzeraktionen auftauchen, kann ich mir keinen Weg vorstellen, einen Javascript-Feature-Test zu entwickeln, um das Buggy-Verhalten zu identifizieren. Daher ist mein einziger aktueller Weg, auf Browser-Sniffing zurückzugreifen und mich nicht auf das "Eingabe" -Tag zu verlassen, wenn der Browser IE ist.

Gibt es hier Möglichkeiten, das Buggy-Verhalten im "input" -Ereignis neben dem Browser-Sniffing zu erkennen? Wenn man Browser-Sniffing durchführen müsste, gibt es eine Möglichkeit, IE nach Verhalten zu identifizieren, statt nach einer User-Agent-Zeichenfolge, die frei manipuliert werden kann und nicht garantiert genau ist?

    
jfriend00 29.08.2012, 06:53
quelle

2 Antworten

1

Jamie-Pate schlagen etwas wie folgt vor:

%Vor%

Sie können also prüfen, ob "Eingabeereignis unterstützt wird und nicht" in Ihrem Code "unterbrochen" ist.

Siehe Ссылка

    
Musterknabe 08.01.2014 15:15
quelle
0

Wenn Sie an einem browserübergreifenden "Eingabeänderung" -Ereignis interessiert sind, hier ist meine Implementierung:

%Vor%


Anwendungsbeispiel:

%Vor%


Funktioniert in allen Browsern, unterstützt Tastatureingabe und Kopieren / Einfügen.

Allerdings gibt es die Ausnahme von diesem verfluchten IE9, der zu der Zeit, als ich den obigen Code schrieb, nicht existierte. Würde Microsoft jemals in Betracht ziehen, ihren Fehler zu beheben? : \

    
Gras Double 31.08.2012 15:04
quelle