2009-08-19 6 views
2

Ich habe keine eindeutige Möglichkeit gefunden, IE6 mit jquery.support statt jquery.browser zu erkennen, die nicht mehr unterstützt wird. Auch ich muss Quirks-Modus berücksichtigen, Ugh !!!jQuery erkennen IE6 mit jQuery.support NICHT jQuery.browser

Ich habe ein paar Beiträge auf Stack gesehen, aber sie alle beziehen sich auf jquery.browser und die Dokumentation für jquery.support ist ein wenig vage.

Jede Hilfe dazu wäre großartig und danke im Voraus.

Antwort

6

Ich denke, dass die Autoren von jQuery simple nicht wollen, dass Entwickler nachschauen, welcher Browser die Anwendung/Website ausführt. Stattdessen möchten wir, dass wir verschiedene Browserfunktionen überprüfen und entscheiden, was wir tun sollen. Es spielt keine Rolle, ob es IE6, IE8, Firefox oder some new browser ist. Als Anwendungsentwickler sollten Sie wissen, wie sich die Browserunterstützung für verschiedene Funktionen auf die Fähigkeit des Benutzers auswirkt, mit Ihrer Anwendung zu arbeiten, und Sie sollten entsprechend handeln.

$ .browser hängt vom Browser-Sniffing mit der User Agent strings ab, was unzuverlässig sein kann, zumal es sehr einfach für Benutzer ist, den User Agent in ihrem Browser zu manipulieren, nicht dass ich mich wegen Layout-Gründen darum kümmern müsste User Agent dann ist es ihr Fehler, dass ihr IE6 sich als IE7 präsentiert, um die Seite nicht richtig darzustellen. ;)

Sie können entweder weiterhin $ .browser verwenden, obwohl es veraltet ist oder versuchen, etwas selbst zu programmieren. Vielleicht gibt es dafür bereits ein jQuery-Plugin? Ich weiß, dass ich das letzte Mal für IE6 überprüfen musste ich diese Methode verwendet ...

+0

Danke, das muss vielleicht die Art sein, wie ich gehe, aber für die Zwischenzeit halte = P –

1

Sie können wie etwas tun:

 
    var ie6to8 = jQuery.support.leadingWhitespace; 
    var ie7to8 = jQuery.support.objectAll; 
    if((ie6to8 && !ie7to8) || (!ie6to8 && ie7to8)) { //simulating a XOR 
     // is ie6 
    } 

Die Dokumentation erzählt, dass jQuery.support.leadingWhitespace 6 auf IEs falsch, 7 und 8. Es wird auch gesagt, dass objectAll die auf IE 7 und 8. Ich falsch ist nahm an, dass dies für die anderen Browser zutraf, und führte eine XOR-Operation für diese Werte durch. Auf diese Weise wird es nur wahr, wenn der Wert von whitespace sich von objectAll unterscheidet, was nur bei IE6 passiert.

Mehr erfahren Sie hier sehen: http://docs.jquery.com/Utilities/jQuery.support

UPDATE: Ab jQuery 1.3 Browser ist Sniffing nicht lange empfohlen, kann aber immer noch die alte Art und Weise durchgeführt werden ($ Browser.msie und $ browser.version verwenden). Hier nachschlagen: http://docs.jquery.com/Release:jQuery_1.3

+0

Funktioniert nicht, können Sie dazu mehr Feedback geben? Ist das mit oder ohne Quarks Mode? –

+0

Dies kann auch funktionieren, gute Idee. :) Ich habe mir nicht die Mühe gemacht, die Dokumentation gründlich zu lesen. –

+0

@Phill Pafford, ich weiß es wirklich nicht, es sagt nichts über die Dokumentation. – Guilherme

4

Ich habe keine bestimmte Art und Weise gefunden IE6 zu erkennen jquery.support

Keine Verwendung, natürlich nicht - das ist der springende Punkt.

Das Dogma ist, dass Erkennung von Unterstützung für bestimmte Funktionen und Codierung um das Fehlen von ihnen, ist eine bessere Möglichkeit zur Aufrechterhaltung der browserübergreifenden Kompatibilität als versuchen, jeden vorhandenen Browser zu verfolgen, und was es unterstützt.

Während Sie könnte rückwärts arbeiten von jquery.support zu raten, welcher Browser ausgeführt wird, und verwenden Sie dann anderen Code, der auf einer völlig anderen Funktion beruht, das wäre völlig pervers. Sie würden den bereits fragilen Ansatz annehmen, dass das Browser-X die Funktion "Y" unterstützt und es noch fragiler macht, indem Sie eine weitere Ebene mit nicht verwandtem Feature-Sniffing hinzufügen, die den falschen Browser aufnehmen könnte.

So ist die Dogma-Antwort, IE6 oder einen anderen bestimmten Browser nie zu erkennen. Verwenden Sie eine Feature-Sniffing-Lösung wie jquery.support, um direkt zu sehen, welche Funktionen Sie verwenden können, aber gehen Sie nicht davon aus, dass das Vorhandensein oder Fehlen von Feature 'Y' bedeutet, dass Sie ein anderes zugeordnetes Feature 'Z' verwenden können mit demselben Browser 'X'. Denn das wird immer schief gehen, wenn Sie einen neuen oder obskuren Browser/Version kennen, den Sie noch nicht kennen.

Und die Antwort des Dogmas ist in der Tat in der Regel richtig. In der Realität gibt es jedoch einige Browserfehler, die nicht durch Feature-Sniffing erkannt werden können und spezielle Workarounds benötigen. Und natürlich ist der ein Browser das ist fast immer IE6.

Es ist unklar, ob Sie in einer dieser Situationen sind, da es keine Details in Ihrer Frage gibt, aber wenn Sie wirklich einen schrecklichen Hack für That One Browser benötigen, ist die beste Lösung immer noch conditional comments, in JavaScript oder HTML.

+0

Wow, das macht es zusammen, danke. Aber immer noch auf eine Lösung warten, wenn es eine gibt ??? –

0

Ich weiß, dass dies nicht Ihren "Anforderungen" entspricht, aber soweit ich weiß, gibt es keinen zuverlässigen Weg, die Feature-Erkennung allein zu verwenden.

Dies ist die einzige zuverlässige, die ich festgestellt habe IE6 zu erkennen. Es ist, was ich in SimpleModal verwenden und es scheint gut zu funktionieren:

var ie6 = $.browser.msie && parseInt($.browser.version) === 6 && typeof window['XMLHttpRequest'] !== "object"; 
2

ich etwas ein bisschen schmutzig in einigen Tests jetzt gerade getan habe, will nicht das veraltete .Browser verwenden, aber nicht gelesen und verstanden .support.

Ich mag am meisten, verwenden Sie eine bedingte Stylesheet zum Stil für IE6. Ich habe einfach eine id = "IE6" hinzugefügt und dann die ID mit jQuery erkannt.

jQuery.fn.exists = function(){return jQuery(this).length>0;} 
      if ($('#IE6').exists()) { 
      //do something 
      } 

Das scheint ganz gut zu arbeiten, habe ich versucht, einen Alarm in dort Brennen und bekam nur es in IE6 hat ich versucht, die Seite zu validieren und es geht wie HTML5, ich bin nicht sicher, ob es ein tiefer liegendes Problem ist, mit dem, was ich getan habe, aber es scheint soweit in Ordnung.

3

Brad Koehler has the idea. Verwenden Sie IE bedingte Anweisungen wie die unten

<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ --> 
<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6"> <![endif]--> 
<!--[if IE 7 ]> <html lang="en" class="no-js ie7"> <![endif]--> 
<!--[if IE 8 ]> <html lang="en" class="no-js ie8"> <![endif]--> 
<!--[if IE 9 ]> <html lang="en" class="no-js ie9"> <![endif]--> 
<!--[if (gt IE 9)|!(IE)]><!--><html lang="en" class="no-js"><!--<![endif]--> 

Dann mit Javascript und ein bisschen jQuery Sie dann dies tun können ..

$(document).ready(function() { 
    if ($('html').is('.ie6')) { 
     alert('You are running IE6!'); 
    } else if($('html').is('.ie7')) { 
    alert("You are running IE7!"); 
    } else { 
     // Browsers other than IE6 and 7. 
    } 
}); 

Der Editor mein erster Abschnitt des Codes ist kannibalisieren also hier ist der Link zu es - http://paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/