Wie kann ich nur auf Internet Explorer 10 für bestimmte Situationen wie Internet Explorer-spezifisches CSS oder Internet Explorer-spezifischen JavaScript-Code abzielen?
Ich habe es versucht, aber es funktioniert nicht:
<!--[if IE 10]> <html class="no-js ie10" lang="en"> <![endif]-->
<!--[if !IE]><!--> <html lang="en" class="no-js"> <!--<![endif]-->
Internet Explorer 10 ignoriert die bedingten Kommentare und verwendet die <html lang="en" class="no-js">
anstelle von <html class="no-js ie10" lang="en">
.
@cc_on
Anweisung weiterhin . Um festzustellen, ob IE10 unterstützt wird oder nicht, können Sie den folgenden Code verwenden :<!--[if !IE]><!--><script>if(/*@cc_on!@*/false){document.documentElement.className+=' ie10';}</script><!--<![endif]-->
. (Ich habe dies als Kommentar gepostet, da sich der IE noch in der Entwicklung befindet, sodass nicht bekannt ist, ob die endgültige Version diese Funktion ebenfalls unterstützt.)<script>if(Function('/*@cc_on return document.documentMode===10@*/')()){document.documentElement.className+=' ie10';}</script>
Verbesserungen: Benötigt keine bedingten Kommentare; funktioniert auch, wenn das Komprimieren / Verarbeiten von Kommentaren entfernt wird; keine Klasse für ie11 hinzugefügt; funktioniert mit ie11, das im ie10-Kompatibilitätsmodus ausgeführt wird; benötigt kein eigenständiges Skript-Tag (kann einfach zu anderem Javascript im Kopf hinzugefügt werden).if(document.documentMode) document.documentElement.className+=' ie'+document.documentMode+'mode';
- die 90% der Probleme löst (manchmal schlagen Kompatibilitätsmodi fehl, in diesem Fall benötigen Sie zusätzlich eine weitere Korrekturstufe).Antworten:
Vielleicht können Sie jQuery wie folgt ausprobieren:
Um diese Methode verwenden zu können, müssen Sie die jQuery Migrate-Bibliothek einschließen, da diese Funktion aus der jQuery-Hauptbibliothek entfernt wurde.
Hat für mich ganz gut geklappt. Aber sicherlich kein Ersatz für bedingte Kommentare!
quelle
== '10.0'
damit es funktioniertjQuery.browser
ist in der aktuellen Version von jQuery (1.9) ohne Plugin nicht mehr verfügbar. blog.jquery.com/2013/01/15/…if (jQuery.browser.msie && jQuery.browser.version < 10) { // do what you will here }
Beachten Sie die Version <10 , um ältere Versionen von IE zu erkennen. IE10 und höher funktioniert gut mit all meinen CSS3, HTML5, JQuery usw.Ich würde kein JavaScript
navigator.userAgent
oder $ .browser (das verwendetnavigator.userAgent
) verwenden, da es gefälscht werden kann.So zielen Sie auf Internet Explorer 9, 10 und 11 ab (Hinweis: auch das neueste Chrome):
So zielen Sie auf Internet Explorer 10 ab:
So zielen Sie auf den Edge-Browser:
Quellen:
quelle
navigator.userAgent
"? Die bedingte Kompilierung ist eine integrierte Funktion der JScript-Laufzeit, die nicht über die Benutzeragentenzeichenfolge gefälscht werden kann.Ich habe auf dieser Seite eine Lösung gefunden, bei der jemand einen wertvollen Kommentar hatte :
Die Lösung ist:
Es
quelle
if (/*@cc_on!@*/false && document.documentMode === 10) {}
eval-Warnungen in Flusenprogrammen umgeht.Internet Explorer 10 versucht nicht mehr, bedingte Kommentare zu lesen. Dies bedeutet, dass bedingte Kommentare wie jeder andere Browser behandelt werden: als normale HTML-Kommentare, die vollständig ignoriert werden sollen. Wenn Sie sich das in der Frage als Beispiel angegebene Markup ansehen, ignorieren alle Browser, einschließlich IE10, die grau hervorgehobenen Kommentarbereiche vollständig. Der HTML5-Standard erwähnt keine bedingte Kommentarsyntax, und genau aus diesem Grund haben sie beschlossen, die Unterstützung in IE10 einzustellen.
Beachten Sie jedoch, dass die bedingte Kompilierung in JScript weiterhin unterstützt wird, wie in den Kommentaren sowie in den neueren Antworten gezeigt. Im Gegensatz dazu wird es auch in der endgültigen Version nicht verschwinden
jQuery.browser
. Und natürlich ist das Schnüffeln von Benutzeragenten nach wie vor fragil und sollte unter keinen Umständen verwendet werden.Wenn Sie wirklich auf IE10 abzielen müssen, verwenden Sie entweder die bedingte Kompilierung, die möglicherweise in naher Zukunft noch unterstützt wird, oder - wenn Sie helfen können - eine Feature-Erkennungsbibliothek wie Modernizr anstelle (oder in Verbindung mit) der Browsererkennung. Sofern Ihr Anwendungsfall kein Noscript erfordert oder IE10 auf der Serverseite unterstützt, wird das Sniffing von Benutzeragenten eher Kopfschmerzen als eine praktikable Option sein.
Klingt ziemlich umständlich, aber denken Sie daran, dass Sie als moderner Browser, der den heutigen Webstandards 1 in hohem Maße entspricht, vorausgesetzt, Sie haben interoperablen Code geschrieben, der in hohem Maße Standards entspricht, keinen speziellen Code für IE10 beiseite legen müssen, es sei denn, dies ist unbedingt erforderlich. dh es soll in Bezug auf Verhalten und Rendering anderen Browsern ähneln. 2 Und es klingt angesichts der Geschichte des IE weit hergeholt, aber wie oft haben Sie erwartet, dass sich Firefox oder Chrome genauso verhalten, nur um mit Bestürzung konfrontiert zu werden?
box-sizing
jahrelang keine Vorfixierung unterstütztWenn Sie tun einen legitimen Grund müssen bestimmte Browser werden Targeting, mit allen Mitteln sie mit den anderen Tools , die Ihnen gegeben erschnüffeln. Ich sage nur, dass es Ihnen heute viel schwerer fallen wird, einen solchen Grund zu finden als früher, und darauf können Sie sich wirklich nicht verlassen.
1 Nicht nur IE10, sondern auch IE9 und sogar IE8, das den größten Teil des ausgereiften CSS2.1-Standards weitaus besser handhabt als Chrome, einfach weil IE8 so stark auf die Einhaltung von Standards ausgerichtet war (zu diesem Zeitpunkt war CSS2.1 mit nur geringen Unterschieden bereits ziemlich stabil nach der heutigen Empfehlung), während Chrome kaum mehr als eine halbglanzpolierte Tech-Demo modernster Pseudo-Standards zu sein scheint.
2 Und ich bin vielleicht voreingenommen, wenn ich das sage, aber es ist verdammt sicher. Wenn Ihr Code in anderen Browsern funktioniert, jedoch nicht im IE, ist die Wahrscheinlichkeit, dass es sich um ein Problem mit Ihrem eigenen Code und nicht mit IE10 handelt, weitaus besser als beispielsweise vor 3 Jahren mit früheren Versionen des IE. Auch hier bin ich vielleicht voreingenommen, aber seien wir ehrlich: Bist du nicht auch? Schauen Sie sich einfach Ihre Kommentare an.
quelle
<!--[if !IE]><!-->stuff you don't want IE9 and below to see<!--<![endif]-->
Ein guter Anfang ist die IE Standards Support Documentation .
So richten Sie IE10 in JavaScript aus:
So zielen Sie auf IE10 in CSS ab:
Falls IE11 über CSS gefiltert oder zurückgesetzt werden muss, lesen Sie eine andere Frage: Wie schreibe ich einen CSS-Hack für IE 11?
quelle
Beide hier veröffentlichten Lösungen (mit geringfügigen Änderungen) funktionieren:
oder
Sie fügen eine der obigen Zeilen in das Head-Tag Ihrer HTML-Seite vor Ihrem CSS-Link ein. Und dann geben Sie in der CSS-Datei Ihre Stile mit der Klasse "ie10" als übergeordnetes Element an:
Und voilà! - Andere Browser bleiben erhalten. Und Sie brauchen jQuery nicht. Das Beispiel, wie ich es implementiert habe, sehen Sie hier: http://kardash.net .
quelle
Ich habe ein kleines Vanille-JavaScript-Plugin namens Layout Engine geschrieben , mit dem Sie IE 10 (und jeden anderen Browser) auf einfache Weise erkennen können, die im Gegensatz zum Sniffing von Benutzeragenten nicht gefälscht werden kann.
Es fügt den Namen der Rendering-Engine als Klasse zum HTML-Tag hinzu und gibt ein JavaScript-Objekt zurück, das den Hersteller und die Version enthält (falls zutreffend).
Schauen Sie sich meinen Blog-Beitrag an: http://mattstow.com/layout-engine.html und holen Sie sich den Code auf GitHub: https://github.com/stowball/Layout-Engine
quelle
Ich verwende dieses Skript - es ist veraltet, aber effektiv bei der Ausrichtung auf ein separates Internet Explorer 10-Stylesheet oder eine JavaScript-Datei, die nur enthalten ist, wenn der Browser Internet Explorer 10 ist, genau wie bei bedingten Kommentaren. Es ist kein jQuery oder anderes Plugin erforderlich.
quelle
Sie können PHP verwenden, um ein Stylesheet für IE 10 hinzuzufügen
Mögen:
quelle
Wenn Sie dies tun müssen, können Sie die Zeichenfolge des Benutzeragenten in JavaScript überprüfen:
Wie andere bereits erwähnt haben, würde ich stattdessen immer die Feature-Erkennung empfehlen.
quelle
String.match()
Gibt ein Array für eine Übereinstimmung oder null zurück, wenn dies nicht der Fall ist.!(String.match())
Lässt es für eine Übereinstimmung falsch oder für keine Übereinstimmung wahr zurückgeben.!(!(String.match()))
Lässt es für eine Übereinstimmung wahr oder für keine Übereinstimmung falsch zurückgeben.!(!(something))
oder!!something
konvertiert einfach irgendetwas in ein boolesches wahr / falsch. stackoverflow.com/questions/784929/…boolean
Wert zu zwingen , zvar name = 'me', hasName = !!name;
.Wenn Sie IE 10 mit Vanilla JavaScript als Ziel festlegen möchten, sollten Sie die Erkennung von CSS-Eigenschaften ausprobieren:
CSS-Eigenschaften
Stattdessen
msTouchAction
können Sie auch eine dieser CSS-Eigenschaften verwenden, da sie derzeit nur in IE 10 verfügbar sind. Dies kann sich jedoch in Zukunft ändern.Testseite
Ich habe eine Testseite mit allen Eigenschaften von CodePen zusammengestellt.
quelle
clipBoardData ist eine Funktion, die nur im IE verfügbar ist. Wenn Sie also auf alle IE-Versionen abzielen möchten, können Sie diese verwenden
quelle
CSS für IE10 + und IE9
quelle
Sie können die Funktionserkennung verwenden, um festzustellen, ob der Browser IE10 oder höher ist.
Nur wahr wenn> IE9
quelle
Conditionizr (siehe Dokumente) fügt Ihrem HTML-Element Browser-CSS-Klassen hinzu, einschließlich ie10.
quelle
Mit JavaScript:
Arbeit für alle IE.
So ändert
/Trident/g
von/Trident/x.0/g
wox = 4, 5, 6
oder7
(oder vielleicht8
für die Zukunft).quelle
Ich wollte nur meine Version der IE-Erkennung hinzufügen. Es basiert auf einem Snippet unter http://james.padolsey.com/javascript/detect-ie-in-js-using-conditional-comments/ und wurde erweitert, um auch ie10 und ie11 zu unterstützen. Es erkennt IE 5 bis 11.
Alles was Sie tun müssen, ist es irgendwo hinzuzufügen und dann können Sie immer mit einer einfachen Bedingung überprüfen. Die globale Variable
isIE
ist undefiniert, wenn es sich nicht um einen IE handelt, oder es handelt sich um die Versionsnummer. So können Sie ganz einfach Dinge wieif (isIE && isIE < 10)
oder ähnliches hinzufügen .quelle
Für mich funktioniert der folgende Code einwandfrei, alle bedingten Kommentare funktionieren in allen IE-Versionen:
Ich bin unter Windows 8.1, nicht sicher, ob es mit dem ie11-Update zusammenhängt ...
quelle
(gt IE 11)
Bit ist völlig unnötig. Sie können es auch einfach tun<!--[if !(IE)]<!-->
.So mache ich benutzerdefiniertes CSS für Internet Explorer:
In meiner JavaScript-Datei:
Und dann definieren Sie in meiner CSS-Datei jeden unterschiedlichen Stil:
quelle
Überprüfen Sie http://suhasrathod.wordpress.com/2013/04/29/ie10-css-hacks/
quelle
Verwenden Sie Babel oder Typoskript, um diesen Code js zu konvertieren
quelle
Diese Antwort brachte mich zu 90% dorthin. Den Rest meiner Antwort habe ich hier auf der Microsoft-Website gefunden .
Der folgende Code ist das, was ich verwende, um alle zu erreichen, dh indem ich eine .ie-Klasse hinzufüge
<html>
Verwenden Sie jQuery (das .browser zugunsten von Benutzeragenten ab 1.9 veraltet hat, siehe http://api.jquery.com/jQuery.browser/ ), um eine .ie-Klasse hinzuzufügen:
quelle
Wenn es Ihnen nichts ausmacht, auf IE10 und höher sowie auf Nicht-IE-Browser abzuzielen, können Sie diesen bedingten Kommentar verwenden:
Abgeleitet von http://www.paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither
quelle
Wenn Sie es wirklich müssen, können Sie bedingte Kommentare zum Funktionieren bringen, indem Sie die folgende Zeile hinzufügen
<head>
:Quelle
quelle
moderne lösung für css
quelle