Ich möchte feststellen, dass der Browser des Client-Rechnern in Oper oder nicht mit Javascript.wie der Opera Browser mit Javascript
Antwort
Das Objekt navigator
enthält alle Informationen, die Sie benötigen. Das sollte tun:
navigator.userAgent.indexOf("Opera");
Du solltest verwenden Feature-Erkennung, wo immer möglich.Siehe @S.Marks Antwort: –
Ich stimme zu, dass Sie die Feature-Erkennung wo immer möglich verwenden sollten, aber dies ist immer noch eine korrekte Antwort auf die explizite Frage * wie man feststellen kann, ob ein Client Opera * ausführt Die Frage war, wie man abschrecken sollte Wenn diese Oper-spezifische Funktion existiert *, dann wäre es besser, nach dieser Funktion zu suchen. Der Vorschlag von S.Mark ist zwar sehr praktisch (ich habe ihn ebenfalls hochgestuft), aber kaum eine Funktionserkennung. Es beruht auf einem Objekt, das nur in der Oper vorhanden ist, und prüft dies, ja, aber es prüft nicht auf die * spezifische * Funktion (die uns unbekannt ist), die der Opera-Check-Anforderung unterliegt. –
Justin ... Die Navigator-Zeichenfolge wurde für die Browser-Erkennung entwickelt. Die Erkennung von Browsern mit Feature-Erkennung ist noch schlimmer als die einfache Browser-Erkennung. – James
stört es Sie mit jQuery?
dann können Sie jQuery.browser
(see documnentation)
Aber die jQuery-Jungs empfehlen verwenden, dies nicht zu verwenden.
Wir empfehlen diese Eigenschaft gegen verwenden, versuchen Sie bitte stattdessen Funktion Erkennung zu verwenden (siehe jQuery.support)
Edit:
Für Mootools: window.opera
(siehe documentation)
if(window.opera){
//do stuffs, for example
alert(opera.version()); //10.10
}
Kein Scherz, es gibt ein Objekt opera
im Opera Browser.
Sie können denken, Objekt opera
ist überschreibbar, aber navigator
ist auch überschreibbar.
UPDATE:
genaueres Ergebnis zu erhalten, Sie wie
if (window.opera && opera.toString() == "[object Opera]"){
//do stuffs, tested on opera 10.10
}
tun konnte, und ich bemerkte, haben Opera beide addEventListener und attachEvent, so gibt es auch eine andere Art und Weise wie
if (window.addEventListener && window.attachEvent){
//do stuffs, tested on opera 10.10
}
+1 für Merkmalserkennung –
@Justin, dies ist keine Feature-Erkennung. Wenn überhaupt, ist es Feature-basierte Browsererkennung. Siehe http://www.nczonline.net/blog/2009/12/29/feature-detection-is-not-browser-detection/ ... Auch 'window.opera && Object.toString.call (window.opera) == "[object Opera]" 'wäre eine solide Prüfung. – James
Danke J-P, aber 'Object.toString.call (window.opera)' funktioniert nicht in meiner Oper 10.10, also habe ich meins auf funktionierende aktualisiert. – YOU
In Prototype.js, we use this inference:
var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
Dies prüft im Wesentlichen, ob window.opera
Objekt existiert und sein interner Wert [[Klasse]] "Opera" ist. Dies ist ein soliderer Test als nur die Suche nach window.opera
Existenz, da gibt es viel weniger Chance, dass einige nicht in Verbindung stehende globale Variable in die Quere kommen und zu falsch positiven Ergebnissen führen.
Apropos unabhängig voneinander globale Variable, nicht vergessen, dass in MSHTML DOM zum Beispiel Elemente global durch ID/Name aufgelöst werden können; Das bedeutet, dass das Vorhandensein von etwas wie <a name="opera" href="...">foo</a>
in einem Markup zu window.opera
führt, das auf dieses Ankerelement verweist. Es gibt Ihre falsche positive ...
Mit anderen Worten, Test [[Klasse]] Wert, nicht nur Existenz.
Und natürlich immer zweimal überlegen, bevor Sie für den Browser schnüffeln. Oft gibt es bessere Möglichkeiten, ein Problem zu lösen;)
P.S.Es gibt eine Chance, dass zukünftige Versionen von Opera [[Class]] von window.opera
ändern, aber das scheint unwahrscheinlich.
Funktioniert nicht mehr –
Jetzt, da Opera die Chrome-Rendering-Engine verwendet, funktioniert die akzeptierte Lösung nicht mehr.
Der User Agent String zeigt wie auf den Punkt:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.132
Die einzige Kennung für Opera ist der OPR
Teil.
Hier ist der Code, den ich verwende, der mit der alten Opera oder der neuen Opera übereinstimmen sollte. Es macht die Opera
var einen Booleschen Wert (true oder false):
var Opera = (navigator.userAgent.match(/Opera|OPR\//) ? true : false);
Danke. Es klappt. Erkennt Opera. – dnns
Oder? '/ Opera | OPR \ //. Test (navigator.userAgent)' –
Die oben genannten Antworten nicht mehr in der neuen Oper arbeiten 30. Da Opera jetzt Chromium verwenden. Bitte benutzen Sie die folgenden:
var isChromium = window.chrome,
isOpera = window.navigator.userAgent.indexOf("OPR") > -1 || window.navigator.userAgent.indexOf("Opera") > -1;
if(isChromium !== null && isOpera == true) {
// is Opera (chromium)
} else {
// not Opera (chromium)
}
Die neue Opera 30 Release verwendet jetzt voll Chromium und verändert auch ihre userAgent
zu OPR
Warum müssen Sie Opera erkennen? Und von Ihrer Frage scheint es, dass Sie Benutzer ohne JS erkennen wollen ... was JS irgendwie unmöglich macht. – James
Ich muss eine js-Funktion nur aufrufen, wenn es einen Browser gibt, ist Opera whats why ich bin hier ...... – Avinash
Wenn immer möglich, versuchen Sie, das Problem und nicht den Browser zu erkennen. Ich gebe zu, dass dies manchmal schwierig ist :( – hallvors