Wenn die Erkennung von JavaScript -Funktionen fehlschlägt
Schlüsselpunkte
- JavaScript -Feature -Erkennung (Testfunktionen, die Programmierer verwenden möchten) ist nicht immer zuverlässig. Testen Sie beispielsweise ActiveXObject im Internet Explorer auf AJAX -Anforderungen, HTML -Attribute, die den DOM -Eigenschaften, Annahmen zum Benutzerverhalten (z. B. Erkennung von Berührungsgeräten) usw. zugeordnet sind, usw.
- Wenn die Merkmalserkennung fehlschlägt, ist manchmal die Browsererkennung erforderlich. Es wird jedoch empfohlen, proprietäre Objekttests anstelle von Navigatorinformationen zu verwenden und sie zu verwenden, um Browser auszuschließen, anstatt sie einzuschließen.
- Seien Sie bei der Implementierung der Browsererkennung äußerst vorsichtig. Gehen Sie immer davon aus, dass es vollständig mit Feature -Tests übereinstimmt, und suchen Sie nur nach Browsererkennung, wenn Sie wissen, dass eine Funktion nicht wie erwartet funktioniert. Darüber hinaus kann die für Objekt- und Merkmalstests verwendete Syntax die Erfolgsrate der Erkennung beeinflussen, sodass die Auswahl der richtigen Syntax entscheidend ist.
Einmal war die Browsererkennung die beste Fähigkeit von JavaScript -Programmierern. Wenn wir wissen, dass einige Funktionen in IE5 funktionieren, jedoch nicht in Netscape 4, werden wir den Browser testen und den Code entsprechend ändern. Zum Beispiel:
if (navigator.userAgent.indexOf('MSIE 5') != -1) { // 我们认为此浏览器是 IE5 }
Aber als ich zum ersten Mal in die Branche kam, hatte das Wettrüsten bereits begonnen! Anbieter fügen den Saiten von Benutzeragenten zusätzliche Werte hinzu, sodass sie wie die Browser ihrer Konkurrenten und ihre eigenen aussehen. Dies ist beispielsweise Safari 5 für Mac:
<code>Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.59.10 (KHTML, like Gecko) Version/5.1.9 Safari/534.59.10</code>
Dies entspricht Tests für "Safari", "Webkit" und "KHTML" (die Konqueror -Codebasis, die Webkit basiert); Mozilla "" (aus historischen Gründen behauptet fast jeder Browser, Mozilla zu sein).
Der Zweck des Hinzufügens aller dieser Werte besteht darin, die Browsererkennung zu umgehen. Wenn das Skript davon ausgeht, dass nur Firefox bestimmte Funktionen bewältigen kann, kann Safari ausgeschlossen werden, auch wenn es funktioniert. Vergessen Sie nicht, dass Benutzer ihren Benutzeragenten selbst ändern können. Ich habe meinen Browser so festgelegt, dass ich "GoogleBot/1.0" erkannte, damit ich auf das zugreifen kann, was der Site -Besitzer nur für das Kriechen hält!
Im Laufe der Zeit ist diese Art von Browsererkennung zu einem unmöglichen Chaos geworden und ist weitgehend nicht mehr in Gebrauch, ersetzt durch etwas Besseres - Feature -Erkennung.
Die Funktionserkennung besteht nur darin, die von uns gebrauchten Funktionen zu testen. Wenn wir beispielsweise getBoundingClientRect
benötigen (die Position eines Elements relativ zum Ansichtsfenster erhalten), ist es wichtig, ob der Browser es nicht kann, nicht welcher Browser es ist. schlimmer als das Testmerkmal selbst:
if (typeof document.documentElement.getBoundingClientRect != "undefined") { // 浏览器支持此函数 }
oder wir ...?
Aber die Wahrheit ist - die Erkennung von Merkmalen ist nicht ganz zuverlässig - manchmal fehlschlägt sie. Schauen wir uns jetzt einige Beispiele an und sehen, was wir tun können, um jeden Fall zu lösen.
ActiveX -Objekt
Das vielleicht berühmteste Beispiel für den Fehler bei der Erkennung von Funktionen ist das Testen von ActiveXObject für AJAX -Anforderungen im Internet Explorer.
activeX ist ein Beispiel für verspätete Objekte, und die praktische Bedeutung ist, dass Sie nicht wissen, ob es unterstützt wird , bis Sie versuchen, es zu verwenden. Wenn der Benutzer ActiveX deaktiviert, wirft der folgende Code daher einen Fehler aus:
if (navigator.userAgent.indexOf('MSIE 5') != -1) { // 我们认为此浏览器是 IE5 }
Versuchen Sie das Objekt instanziieren, fangen alle Fehler und verarbeiten Sie es entsprechend:
<code>Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.59.10 (KHTML, like Gecko) Version/5.1.9 Safari/534.59.10</code>
zugeordnet ist
Attributzuordnung wird häufig verwendet, um die Unterstützung von APIs mit HTML5 -Eigenschaften zu testen. Überprüfen Sie beispielsweise, ob ein Element mit die draggierbare API unterstützt, indem Sie nach draggablen Eigenschaften suchen: [draggable="true"]
if (typeof document.documentElement.getBoundingClientRect != "undefined") { // 浏览器支持此函数 }
HTML -Eigenschaften auf DOM -Eigenschaften automatisch zugeordnet werden. Aus diesem Grund ist in diesen älteren Versionen so verwirrend, da es überhaupt keine Eigenschaften, sondern DOM -Eigenschaften zurückgibt.
getAttribute
Dies bedeutet, wenn wir ein Element verwenden, das bereits das Attribut
dann, selbst wenn sie nicht unterstützt werden, wird IE8 oder früher
fürif (typeof window.ActiveXObject != "undefined") { var request = new ActiveXObject("Microsoft.XMLHTTP"); }
true
Attribut kann alles sein: ("draggable" in element)
Aber das Ergebnis wird das gleiche sein - IE8 oder früher wird
fürif (typeof window.ActiveXObject != "undefined") { try { var request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (ex) { request = null; } if (request !== null) { //... 我们有一个请求对象 } }
true
In diesem Fall besteht die Lösung darin, ein Element zu verwenden, das dieses Attribut zum Testen nicht hat. Die sicherste Möglichkeit besteht darin, das erstellte Element zu verwenden: ("nonsense" in element)
Annahmen über Benutzerverhalten
if ("draggable" in element) { // 浏览器支持拖放 }
Die meisten Touch -Geräte implementieren manuelle Verzögerungen, bevor ein Klickereignis ausgelöst wird (normalerweise etwa 300 Millisekunden), um zu vermeiden, dass Sie auf Elemente klicken und gleichzeitig klicken. Dadurch fühlt sich die Anwendung jedoch träge und nicht mehr an. Daher verwenden Entwickler diesen Funktionstest manchmal, um das Ereignis zu geben:
<div draggable="true"> ... </div>
Diese Bedingung stammt jedoch aus einem
-Fehler des<div nonsense="true"> ... </div>
In diesem Fall besteht die Lösung darin, Ereignisunterstützung überhaupt nicht zu testen - stattdessen zwei
Ereignisse gleichzeitig zu binden und dann zu verhindern, dass die Berührung Klicks erzeugt: Dies ist schmerzhaft, aber manchmal müssen wir nicht das Feature testen - , sondern der Browser - weil ein bestimmter Browser behauptet, etwas zu unterstützen, das nicht funktioniert. Ein aktuelles Beispiel ist Feature -Test schlägt hier aus, da Opera 12 behauptet, dies zu unterstützen. Es funktioniert einfach nicht: Nun, wenn Sie nur versuchen möchten, ein benutzerdefiniertes Drag -Image hinzuzufügen und den Standardwert ohne Unterstützung beizubehalten (was passieren wird), kann dies in Ordnung sein. Aber was ist, wenn Ihre Anwendung benutzerdefinierte Bilder benötigt, damit Browser, die sie nicht unterstützen, eine völlig andere Implementierung verwenden sollte (d. H. Verwenden Sie benutzerdefinierte JavaScript, um alle Dragverhalten zu implementieren)?
Oder was ist, wenn der Browser bestimmte Merkmale implementiert, aber unvermeidliche Rendering -Fehler gibt? Manchmal haben wir keine andere Wahl, als den problematischen Browser explizit zu erkennen und ihn aus den Funktionen auszuschließen, die er mit dem mit der Verwendung versuchte. Das Problem wird also - was ist der sicherste Weg, um die Browsererkennung zu erzielen? Ich habe zwei Vorschläge:
Wir haben festgestellt, dass Benutzeragentenketten ein unzuverlässiges Chaos sind, aber Anbieterketten tatsächlich ziemlich vorhersehbar sind und verwendet werden können, um Chrom oder Safari zuverlässig zu testen: Die goldene Regel für all dies ist äußerst vorsichtig. Stellen Sie sicher Bekannte Merkmale (dies ist der Zweck des Feature -Tests)
Testsyntax auswählen
Vor dem Ende möchte ich die verschiedenen Arten von Syntax überprüfen, die wir für Objekt- und Eigenschaftstests verwenden können. Zum Beispiel ist die folgende Syntax in den letzten Jahren üblich geworden: Wir konnten es in der Vergangenheit nicht verwenden, weil IE5 und seine ähnlichen Produkte aufgrund von Syntax Fehler werfen würden. im Wesentlichen ist es genau das gleiche wie die folgenden, aber es ist kürzer zu schreiben: Die Testbedingungen beruhen jedoch normalerweise auf automatische Typumwandlung: Wir haben diese Syntax früher in einigen Browser -Objekt -Tests (z. B. Aber wir testen möglicherweise etwas, das null oder leere Zeichenfolgen effektiv zurückgibt, die beide auf False bewerten. Zum Beispiel wird das Es wird nur zu true bewertet, wenn das Die allgemeine Regel lautet: Die Herstellung der automatischen Typumwandlung ist für Objekte und Funktionen sicher, aber nicht unbedingt sicher für Zeichenfolgen und Zahlen oder Werte, die null sein können. , das gesagt - wenn Sie es sicher verwenden können, tun Sie es, weil es in modernen Browsern normalerweise viel schneller ist (wahrscheinlich weil sie für diese Art von Zustand optimiert sind). Weitere Informationen hierzu finden Sie unter: Automatische Konvertierung in der realen Welt. JavaScript -Feature -Erkennung ist eine Technologie, die von Entwicklern verwendet wird, um festzustellen, ob der Browser eines Benutzers eine bestimmte Funktion oder API unterstützt. Dies ist entscheidend, da nicht alle Browser alle Funktionen von JavaScript unterstützen. Durch die Verwendung von Feature -Erkennung können Entwickler alternative Lösungen oder Fallbacks für nicht unterstützte Funktionen bereitstellen und sicherstellen, dass Websites oder Anwendungen in verschiedenen Browsern korrekt ausgeführt werden. Dies verbessert die Benutzererfahrung und gewährleistet die Kompatibilität. JavaScript -Merkmalserkennung kann aus mehreren Gründen fehlschlagen. Ein häufiger Grund ist, dass der Feature -Erkennungscode falsch implementiert wird. Wenn der Code beispielsweise nach Eigenschaften prüft, die im Objekt nicht vorhanden sind, gibt er undefinierter und führt zu einem falsch negativen Negativ zurück. Ein weiterer Grund könnte eine Browser -Quirk oder ein Fehler sein, der dazu führen kann, dass die Merkmalserkennung ungenaue Ergebnisse liefert. Die Funktionserkennung von Features besteht darin, zu überprüfen, ob der Browser eines Benutzers eine bestimmte Funktion oder eine bestimmte API unterstützt, während die Browsererkennung den Browser und die Version des Benutzers erkennt. Während beide Techniken so konzipiert sind, dass die Kompatibilität und Funktionalität sichergestellt wird, wird die Erkennung von Merkmalen häufig als bessere Praxis angesehen, da sie direkt auf Funktionen überprüft, anstatt ihre Unterstützung basierend auf dem Browsertyp oder -version zu übernehmen. Sie können das Attribut feature.js ist ein leichtes, schnelles und einfaches JavaScript -Dienstprogramm zur Erkennung von Funktionen. Es bietet eine benutzerfreundliche API, mit der Entwickler testen können, ob der Browser bestimmte Funktionen unterstützt. Dies bietet eine Sicherungslösung oder alternative Lösung für nicht unterstützte Funktionen, wodurch die Kompatibilität und Funktionalität der Website oder Anwendung verbessert wird. modernizr ist eine JavaScript -Bibliothek, die Entwicklern hilft, HTML5- und CSS3 -Funktionen zu nutzen und gleichzeitig die Kompatibilität mit älteren Browsern aufrechtzuerhalten. Es wird die Funktionserkennung verwendet, um zu überprüfen, ob der Browser bestimmte Funktionen unterstützt und HTML -Elemente Klassen hinzufügt, sodass Sie bestimmte Browserfunktionen in Stylesheets oder JavaScript finden können. Geräte-Detektor-JS ist ein leistungsstarkes Tool für die Erkennung von Geräten. Es analysiert User Agent Strings und erkennt Smartphones, Tablets, Desktops, Fernseher und andere Geräte. Es erkennt auch Browser, Motoren, Betriebssysteme und andere nützliche Informationen. Sie können dieses Paket verwenden, um das Verhalten einer Website oder Anwendung basierend auf den erkannten Geräten anzupassen. Einige Best Practices für die Implementierung von Funktionen sind: Verwenden von zuverlässigen und getesteten Bibliotheken wie Modernizr oder Feature.js, gründlich testen Sie Ihren Feature -Erkennungscode auf verschiedenen Browsern und Geräten, da nicht unterstützte Funktionen alternative Lösungen oder Fallbacks liefern und die Übernahme von Merkmalsunterstützung vermeiden können basierend auf Browsertyp oder -version. Ja, die Erkennung von Funktionen kann die Leistung der Website verbessern. Indem Sie nicht unterstützte Funktionen erkennen und alternative Lösungen oder Fallback -Lösungen bereitstellen, können Sie verhindern, dass unnötiger Code im Browser ausgeführt wird. Dies verkürzt die Ladezeit und verbessert die Gesamtleistung der Website. Aufgrund der schnellen Entwicklung der Webentwicklung kann es schwierig sein, die neuesten Funktionen zu verstehen, die von verschiedenen Browsern unterstützt werden. Ressourcen wie das Mozilla Developer Network (MDN), kann ich jedoch verwenden, und JavaScript -Dokumentation kann die neuesten Informationen zur Funktionsunterstützung in verschiedenen Browsern liefern. Das obige ist der detaillierte Inhalt vonWenn die Erkennung von JavaScript -Funktionen fehlschlägt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!if (navigator.userAgent.indexOf('MSIE 5') != -1) {
// 我们认为此浏览器是 IE5
}
Dinge, die überhaupt nicht funktionieren
setDragImage()
in Opera 12 (was eine Möglichkeit ist, dataTransfer
Objekte zu ziehen und zu fallen). <code>Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.59.10 (KHTML, like Gecko) Version/5.1.9 Safari/534.59.10</code>
Objekterkennungsoper 12 oder früher verwenden, sodass wir diesen Ausschluss verwenden können, um die draggable Unterstützung zu testen: window.opera
if (typeof document.documentElement.getBoundingClientRect != "undefined") {
// 浏览器支持此函数
}
if (typeof window.ActiveXObject != "undefined") {
var request = new ActiveXObject("Microsoft.XMLHTTP");
}
if (typeof window.ActiveXObject != "undefined") {
try {
var request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (ex) {
request = null;
}
if (request !== null) {
//... 我们有一个请求对象
}
}
if ("draggable" in element) {
// 浏览器支持拖放
}
if (navigator.userAgent.indexOf('MSIE 5') != -1) {
// 我们认为此浏览器是 IE5
}
<code>Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.59.10 (KHTML, like Gecko) Version/5.1.9 Safari/534.59.10</code>
if (typeof document.documentElement.getBoundingClientRect != "undefined") {
// 浏览器支持此函数
}
window.opera
Tests) verwendet, was aufgrund der Art und Weise, wie Objekte bewerten als falsch bewertet werden. style.maxWidth
Attribut manchmal verwendet, um IE6: if (typeof window.ActiveXObject != "undefined") {
var request = new ActiveXObject("Microsoft.XMLHTTP");
}
maxWidth
Attribut unterstützt wird und der den Autor definierte Wert hat. Wenn wir also den Test so schreiben, kann er fehlschlagen: if (typeof window.ActiveXObject != "undefined") {
try {
var request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (ex) {
request = null;
}
if (request !== null) {
//... 我们有一个请求对象
}
}
häufig gestellte Fragen zur JavaScript -Funktionserkennung
Was ist die Erkennung von JavaScript -Funktionen und warum ist es wichtig?
Wie fällt die Erkennung von JavaScript -Funktionen aus?
Was ist der Unterschied zwischen Merkmalserkennung und Browsererkennung?
Wie kann ich JavaScript verwenden, um mobile Geräte zu erkennen?
navigator.userAgent
in JavaScript verwenden, um mobile Geräte zu erkennen. Diese Eigenschaft gibt eine Zeichenfolge zurück, die den User Agent Header des Browsers darstellt. Durch die Überprüfung von bestimmten Schlüsselwörtern in dieser Zeichenfolge (z. B. "Android", "iPhone" oder "iPad") können Sie feststellen, ob sich der Benutzer auf einem mobilen Gerät befindet. Was ist feature.js und wie hilft es bei der Funktionserkennung?
Was ist Modernizr und wie hilft es bei der Erkennung von Funktionen?
Wie verwenden Sie das Paket für Geräte-Detektor-JS zur Funktionserkennung?
Das Paket Was sind einige Best Practices für die Implementierung der Funktionserkennung?
Kann die Erkennung von Erkenntnissen helfen, die Leistung der Website zu verbessern?
Wie kann man die neuesten Funktionen verstehen, die von verschiedenen Browsern unterstützt werden?

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Häufig gestellte Fragen und Lösungen für das Ticket-Ticket-Ticket-Ticket in Front-End im Front-End-Entwicklungsdruck ist der Ticketdruck eine häufige Voraussetzung. Viele Entwickler implementieren jedoch ...

JavaScript ist der Eckpfeiler der modernen Webentwicklung. Zu den Hauptfunktionen gehören eine ereignisorientierte Programmierung, die Erzeugung der dynamischen Inhalte und die asynchrone Programmierung. 1) Ereignisgesteuerte Programmierung ermöglicht es Webseiten, sich dynamisch entsprechend den Benutzeroperationen zu ändern. 2) Die dynamische Inhaltsgenerierung ermöglicht die Anpassung der Seiteninhalte gemäß den Bedingungen. 3) Asynchrone Programmierung stellt sicher, dass die Benutzeroberfläche nicht blockiert ist. JavaScript wird häufig in der Webinteraktion, der einseitigen Anwendung und der serverseitigen Entwicklung verwendet, wodurch die Flexibilität der Benutzererfahrung und die plattformübergreifende Entwicklung erheblich verbessert wird.

Es gibt kein absolutes Gehalt für Python- und JavaScript -Entwickler, je nach Fähigkeiten und Branchenbedürfnissen. 1. Python kann mehr in Datenwissenschaft und maschinellem Lernen bezahlt werden. 2. JavaScript hat eine große Nachfrage in der Entwicklung von Front-End- und Full-Stack-Entwicklung, und sein Gehalt ist auch beträchtlich. 3. Einflussfaktoren umfassen Erfahrung, geografische Standort, Unternehmensgröße und spezifische Fähigkeiten.

JavaScript zu lernen ist nicht schwierig, aber es ist schwierig. 1) Verstehen Sie grundlegende Konzepte wie Variablen, Datentypen, Funktionen usw. 2) Beherrschen Sie die asynchrone Programmierung und implementieren Sie sie durch Ereignisschleifen. 3) Verwenden Sie DOM -Operationen und versprechen Sie, asynchrone Anfragen zu bearbeiten. 4) Vermeiden Sie häufige Fehler und verwenden Sie Debugging -Techniken. 5) Die Leistung optimieren und Best Practices befolgen.

Diskussion über die Realisierung von Parallaxe -Scrolling- und Elementanimationseffekten in diesem Artikel wird untersuchen, wie die offizielle Website der Shiseeido -Website (https://www.shiseeido.co.jp/sb/wonderland/) ähnlich ist ...

Zu den neuesten Trends im JavaScript gehören der Aufstieg von Typenkripten, die Popularität moderner Frameworks und Bibliotheken und die Anwendung der WebAssembly. Zukunftsaussichten umfassen leistungsfähigere Typsysteme, die Entwicklung des serverseitigen JavaScript, die Erweiterung der künstlichen Intelligenz und des maschinellen Lernens sowie das Potenzial von IoT und Edge Computing.

Wie fusioniere ich Array -Elemente mit derselben ID in ein Objekt in JavaScript? Bei der Verarbeitung von Daten begegnen wir häufig die Notwendigkeit, dieselbe ID zu haben ...

Eingehende Diskussion der Ursachen des Unterschieds in der Konsole.log-Ausgabe. In diesem Artikel wird die Unterschiede in den Ausgabeergebnissen der Konsolenfunktion in einem Code analysiert und die Gründe dafür erläutert. � ...
