Browsererkennung per Javascript
Nick
- javascript
Hallo,
ich bin eben auf diese Seite zum Thema "Browsererkennung per Javascript" gestossen.
http://labs.hostsen.net/2009/02/02/browsererkennung-mit-javascript/
Hat das jemand von Euch schon mal eingesetzt ? Was ist davon zu halten ? Funktioniert das wirklich zuverlässig ?
Mfg Nick
[latex]Mae govannen![/latex]
ich bin eben auf diese Seite zum Thema "Browsererkennung per Javascript" gestossen.
http://labs.hostsen.net/2009/02/02/browsererkennung-mit-javascript/
Hat das jemand von Euch schon mal eingesetzt ? Was ist davon zu halten ? Funktioniert das wirklich zuverlässig ?
Schmeiß es weg. Ist ganz großer Müll.
Die Opera-"Erkennung" schmeißt in allen von mir getesteten Browsern einen Fehler, wenn ich das auskommentiere, ist bei *jedem* Browser IE true, FF hat außerdem noch FF true und FF3 true, also 3 x true. Damit kann man keine Erkennung durchführen. Die Wahrscheinlichkeit, daß ein Script, das auf dieser Erkennung aufbaut, abstürzt ist nahe 100%
Getestet: Safari, Opera, IE6, FF3
Schreibe das JS so, daß die verwendeten Methoden und Eigenschaften abfragt und dementsprechend reagiert, für Sonderfälle hilft diese Liste
Cü,
Kai
Hy,
... ich denke auch, das wegschmeissen das Richtige ist ...
Deine Link-Empfehlung kenne ich (natürlich) auch - suche genau genommen eine Methode, den Safari "herauszufiltern"; laut Liste gibt es da praktisch nichts Safari-spezifisches (jedenfalls nichts so eindeutiges wie z.B. "window.opera").
Am nächsten dran wäre ich noch mit "document.defaultCharset" - müßte ich nur den IE und den als IE getarnten Opera ausschliessen ..., oder ?!
Mfg Nick
Hallo,
Deine Link-Empfehlung kenne ich (natürlich) auch - suche genau genommen eine Methode, den Safari "herauszufiltern"; laut Liste gibt es da praktisch nichts Safari-spezifisches (jedenfalls nichts so eindeutiges wie z.B. "window.opera").
Worum geht es denn, Safari vs. Konqueror vs. Google Chrome?
Oder vs. Opera, IE, Mozilla?
Grüsse
Cyx23
Hallo,
Am nächsten dran wäre ich noch mit "document.defaultCharset" - müßte ich nur den IE und den als IE getarnten Opera ausschliessen ..., oder ?!
Du kannst ja mal if(window.atob&&document.defaultCharset)
als Basis versuchen.
Grüsse
Cyx23
suche genau genommen eine Methode, den Safari "herauszufiltern";
Um dir eine vernünftige Antwort auf diese Frage zu geben, musst du erst diese beantworten:
Warum?
Mathias
»» suche genau genommen eine Methode, den Safari "herauszufiltern";
Um dir eine vernünftige Antwort auf diese Frage zu geben, musst du erst diese beantworten:
Warum?
Hy Molily, hy Cyx23,
dank' erstmal, das ihr euch der Sache (ernsthaft) angenommen habt.
WARUM Browserweiche ?!
Hasse ich wie ihr auch - sollte, wann immer möglich, umgangen werden.
ABER (und jetzt kommt Moliliys Spezialgebiet):
Es geht ums Text markieren über window.getSelection - selectAllChildren, das z.B. im Opera nur unter der Voraussetzung funktioniert, das in dem zu markierenden Bereich alle Tags (Kindknoten) in einer Zeile stehen - was in meinem Fall nicht möglich ist (der Bereich wird dynamisch erzeugt und ist zu umfangreich).
Leider gibt keine Quelle im Internet preis, wie Safari - genau - mit den genannten Methoden umgeht, obwohl er diese (wie Opera auch) kennt.
WARUM TESTE ICH DAS NICHT EINFACH SELBST ? Auch diese einfache Frag wird jetzt beantwortet:
Weil ich vermute (jedenfalls nicht ausschliessen kann !!!), dass der Safari für PCs etwas anderes ist (sein kann !!!) als der Safari für den MAC (ist beim IE für MAC/PC jedenfalls so gewesen).
Was nützt es mir also, den Safari für Windows herunterzuladen, wenn ich die entscheidende Frage ("Was erlebt der Powerbook-Besitzer") doch nicht beantworten kann.
Zurück zum Ausgangsproblem:
Ich habe also für meinen Fall eine Browserweiche:
Alle IE und Firefox-Besitzer bekommen ein Menü mit "Text markieren-" und "Markierung entfernen-" Funktion angezeigt, Opera-Besitzer bekommen eine diesbezügliche Anleitung und dürfen (bis auf Weiteres) den betreffenden Bereich manuell markieren, und so soll es bis zur endgültigen Klärung der Frage auch beim Safari-Besitzer laufen.
Habe Molilys Beiträge/Artikel und auch viele andere Beiträge zum Thema "Text markieren" selbstverständlich sorgfältig recherchiert und studiert, aber an der entscheidenden Stelle fehlt dann doch leider immer die Antwort ...
Fürchte, ich muss mir doch ein MAC zulegen - ob ich will oder nicht.
Es grüßt und dankt
Nick
Leider gibt keine Quelle im Internet preis, wie Safari - genau - mit den genannten Methoden umgeht, obwohl er diese (wie Opera auch) kennt.
Das habe ich dir doch im anderen Thread gesagt und mein Artikel dazu gibt diese Info auch preis.
Weil ich vermute (jedenfalls nicht ausschliessen kann !!!), dass der Safari für PCs etwas anderes ist (sein kann !!!) als der Safari für den MAC
Ist er aber nicht. Die zugrunde liegende Browserengine namens Webkit bzw. JavaScript-Engine namens WebCore ist plattformübergreifend.
(ist beim IE für MAC/PC jedenfalls so gewesen).
Der IE/Mac war einfach eine GANZ ANDERE Software, die mit dem IE/Win nichts zu tun hatte.
Was nützt es mir also, den Safari für Windows herunterzuladen, wenn ich die entscheidende Frage ("Was erlebt der Powerbook-Besitzer") doch nicht beantworten kann.
Die Frage kannst du mit einer Browserweiche auch nicht beantworten! Frage doch einfach die Mac-User hier und bitte sie, das zu testen. Am Montag kann ich gerne nochmal mit einem Mac testen.
Alle IE und Firefox-Besitzer bekommen ein Menü mit "Text markieren-" und "Markierung entfernen-" Funktion angezeigt, Opera-Besitzer bekommen eine diesbezügliche Anleitung und dürfen (bis auf Weiteres) den betreffenden Bereich manuell markieren, und so soll es bis zur endgültigen Klärung der Frage auch beim Safari-Besitzer laufen.
Es besteht kein Grund, Opera auszusperren Ich weiß nicht, wieso du Opera die Methode zukommen lässt, die er nicht kann. Ich habe doch in meinem Artikel beschrieben, dass man Opera besser mit Microsoft-TextRanges bedient, indem man erst auf document.selection.createRange prüft. Diese Methode hat meinen Tests zufolge kein Problem damit, mehrere Zeilen zu markieren.
Das Script funktioniert, wie ich es im Artikel vorstelle, browserübergreifend ohne Browserweichen - und ohne manuelle Anleitungen für manche Benutzer.
Habe Molilys Beiträge/Artikel und auch viele andere Beiträge zum Thema "Text markieren" selbstverständlich sorgfältig recherchiert und studiert
Hast du offenbar nicht, ansonsten verstehe ich nicht, warum du nicht einen Ratschlag beherzigst und warum du zwei Thread unter zwei verschiedenen Namen aufmachst. Wenn du die gegebenen Informationen nicht nutzen willst, meinetwegen, dann suche halt weiter nach einer Browsererkennung.
Mathias
Hallo,
»» Weil ich vermute (jedenfalls nicht ausschliessen kann !!!), dass der Safari für PCs etwas anderes ist (sein kann !!!) als der Safari für den MAC
Ist er aber nicht. Die zugrunde liegende Browserengine namens Webkit bzw. JavaScript-Engine namens WebCore ist plattformübergreifend.
Und es lassen sich vmtl. auch noch Linux-Live CDs mit Konqueror finden, falls Webkit noch umfassender getestet werden soll.
Grüsse
Cyx23
Es besteht kein Grund, Opera auszusperren Ich weiß nicht, wieso du Opera die Methode zukommen lässt, die er nicht kann. Ich habe doch in meinem Artikel beschrieben, dass man Opera besser mit Microsoft-TextRanges bedient, indem man erst auf document.selection.createRange prüft. Diese Methode hat meinen Tests zufolge kein Problem damit, mehrere Zeilen zu markieren.
Das Script funktioniert, wie ich es im Artikel vorstelle, browserübergreifend ohne Browserweichen - und ohne manuelle Anleitungen für manche Benutzer.
-------------------------------------------------------------------
-------------------------------------------------------------------
Hallo Mathias,
... hier mal Deine (praktisch unveränderte) Funktion zum Markieren von Text.
Soweit dürfte ich noch keinen Fehler gemacht haben, oder ?! Wenn ich das Script im Opera teste, geschieht genau das, was ich beschrieben habe:
Opera* markiert die Kindelemente der Ebene "ebene" - grundsätzlich - nur unter der Voraussetzung, das alle Elemente in einer Zeile ohne Umbrüche notiert sind (siehe kommentierter Bereich)- und das geht in meinem Originalscript - aus den bereits erwähnten Gründen - nicht.
Ich bin also beim Recherchieren, Studieren und Ausprobieren Deiner und anderer Artikel weit weniger "schludrig", als Du glaubst ... ;-)
Wenn ich jetzt hier einen entscheidenden (Denk-)Fehler irgendwo gemacht habe: Lass es mich bitte wissen ...
Mfg Nick
* Opera 9.63 in der Standardkonfiguration auf Windows XP Prof SP3
-------------------------------------------------------------------
-------------------------------------------------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<title></title>
<script type="text/javascript">
<!--
function markieren()
{
elem = document.getElementById('ebene');
if (document.selection && document.selection.createRange)
{
var textRange = document.selection.createRange();
textRange.moveToElementText(elem);
textRange.select();
}
else if (document.createRange && window.getSelection)
{
var range = document.createRange();
range.selectNode(elem);
var selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
}
}
-->
</script>
</head>
<body>
<div id="ebene">
<p>Inhalt 1</p>
<p>Inhalt 2</p>
<p>Inhalt 3</p>
</div>
<!--
<div id="ebene"><p>Inhalt 1</p><p>Inhalt 2</p><p>Inhalt 3</p></div>
-->
<a href="javascript:markieren()">Ebene markieren</a>
</body>
</html>
ist bei *jedem* Browser IE true
Zum Info:
Das liegt vermutlich daran, dass ein Backslash bei der verlinkten Quelle verloren gegangen ist, im Original lautet die Prüfung:
IE='\v'=='v'
JScript-Doku dazu:
\v Vertical tab. Not compliant with ECMAScript standard and incompatible with Microsoft Internet Explorer 6.0.
Mathias
Hi,
im Original lautet die Prüfung:
IE='\v'=='v'
"Originaler", da 1 Tag eher gepostet: 32 bytes, ehr ... 9, ehr ... 7!!! to know if your browser is IE
Ich habe mich in den Kommentaren über diesen, IMHO, "Wahnsinn" ausgelassen. Nette Spielerei, aber in der Anwendung sollte man die Finger von lassen ...
Gruß, Cybaer
http://labs.hostsen.net/2009/02/02/browsererkennung-mit-javascript/
Hat das jemand von Euch schon mal eingesetzt ? Was ist davon zu halten ? Funktioniert das wirklich zuverlässig ?
Kommt auf den Zweck an, wozu man "Browser erkennen" will. Dass dazu eine allgemeine Notwendigkeit bestünde, ist ein Irrtum, denn zumeist muss man das in der JavaScript-Programmierung nicht. Einige Worte dazu unter http://molily.de/js/browser.html.
Wenn man einen Fall hat, in der man Browser anhand ihrer Funktions-Dekompilation unterscheiden muss, dann hilft einem das bei den gegenwärtigen Versionen weiter. So einen Fall gibts aber so gut wie nie. In den restlichen Fällen wären entsprechend passendere "Erkennungen" angebracht.
Von einem ziemlich willkürlichen Verhalten in undefinierten Grenzfällen darauf zu schließen, dass es sich um einen bestimmten Browser handelt, ist höchst spekulativ und unzuverlässig.
Mathias
Hallo molily!
Einige Worte dazu unter http://molily.de/js/browser.html.
OT... von da aus zurück auf molily.de, »XHTML wird zu Grabe getragen«.
Hast am 1.1.70 um 1 Uhr nicht Neujahr gefeiert, und stattdessen weit in die IT-Zukunft geblickt? ;)
Viele Grüße aus Frankfurt/Main,
Patrick
Hast am 1.1.70 um 1 Uhr nicht Neujahr gefeiert, und stattdessen weit in die IT-Zukunft geblickt? ;)
Ich habe versucht, die Blogsoftware zu aktualisieren, leider stehen auf dem Server die nötigen Bibliotheken nicht zur Verfügung - also zurück zur alten Version, die mit den von der neuen Version geänderten Datenbankeinträgen wohl nicht zurechtkommt.
Mathias