Opera indentificatie omzeilen

Pagina: 1
Acties:
  • 113 views sinds 30-01-2008
  • Reageer

  • Brent
  • Registratie: September 2001
  • Laatst online: 10:33
Opera identificeerd zich standaard als MSIE 5. Ik heb een js-scriptje (voeg toe aan favo's) wat alleen in IE uitgevoerd mag worden; in andere browsers komt een vervangend tekstje. voor mozilla en NS werkt dat goed, maar opera laat dus de IE-only link zien. Nou vind ik dat niet erg netjes (zo'n dode link) dus kun je met een 1 of ander truukje er toch voor zorgen dat Opera de vervangende tekst krijgt te zien?

script: (in php-tags, maar die moet jemaar effe wegdenken. het ziet er iig netjes uit zo :)
PHP:
1
2
3
4
5
6
7
8
9
10
    <script language="JavaScript1.2">
    function addbookmark(){
    if (document.all)
    window.external.AddFavorite("http://www.breepee.tk/","Breepee")
    }
    if (browser_type=="Microsoft Internet Explorer"&&browser_version>=4)
    document.write('<a href="javascript:addbookmark()">favorieten toe te voegen!</a>');
    else 
    document.write('bookmarks toe te voegen!');
    </script>


[edit] typo in de titel

Humanist | Kernpower! | Determinist | Verken uw geest | Politiek dakloos


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Kijk eens naar de navigator.userAgent

Daar zit wel degelijk een referentie in naar Opera die je kunt gebruiken.

  • RM-rf
  • Registratie: September 2000
  • Laatst online: 12:52

RM-rf

1 2 3 4 5 7 6 8 9

ik meen dat in opera ook window.opera een variabele is die dan true is, de userAgent is gewoon een string die steeds meer gefaked kan worden.

misschien nog beter is gewoon te kijken of window.external een object is, en eventueel of de AddFavorite method ondersteund wordt, de reden dat browsers de userAgent-string faken is dat scripts niet meer kijken naar werkelijke ondersteuning van methods maar enkel naar namen van browsers:
volgens mij ondersteund mijn msie5.2 namelijk dit ook niet (op mac)

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


  • Brent
  • Registratie: September 2001
  • Laatst online: 10:33
op opera 6 te ontdekken (ook alsie zich identificeerd als MSIE5) moet je dus dit gebruiken:

if ((navigator.userAgent.indexOf("Opera 6")!=-1)
||(navigator.userAgent.indexOf("Opera/6")!=-1))

dit geldt alleen voor opera6. maar wat ik wil is een scheiding maken tussen IE en de rest. om nou voor iedere browser een aparte regel toe te voegen vinnik geen goed idee.

maar ik ben nog aan't pluizen :)

Humanist | Kernpower! | Determinist | Verken uw geest | Politiek dakloos


  • Brent
  • Registratie: September 2001
  • Laatst online: 10:33
RM-rf schreef op 03 augustus 2002 @ 10:15:
ik meen dat in opera ook window.opera een variabele is die dan true is, de userAgent is gewoon een string die steeds meer gefaked kan worden.

misschien nog beter is gewoon te kijken of window.external een object is, en eventueel of de AddFavorite method ondersteund wordt, de reden dat browsers de userAgent-string faken is dat scripts niet meer kijken naar werkelijke ondersteuning van methods maar enkel naar namen van browsers:
volgens mij ondersteund mijn msie5.2 namelijk dit ook niet (op mac)
das ook een goeie, die zal ik ook effe proberen.

Humanist | Kernpower! | Determinist | Verken uw geest | Politiek dakloos


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

RM-rf schreef op 03 augustus 2002 @ 10:15:
ik meen dat in opera ook window.opera een variabele is die dan true is, de userAgent is gewoon een string die steeds meer gefaked kan worden.

misschien nog beter is gewoon te kijken of window.external een object is, en eventueel of de AddFavorite method ondersteund wordt, de reden dat browsers de userAgent-string faken is dat scripts niet meer kijken naar werkelijke ondersteuning van methods maar enkel naar namen van browsers:
volgens mij ondersteund mijn msie5.2 namelijk dit ook niet (op mac)
:? Maar het faken heeft geen nut (daarom vind ik die hele Opera zut zo vreselijk dom, ze snijden alleen zichzelf in de vingers). En tuurlijk moet je checken op methods e.d., maar als de browser daar zo vreselijk mee omgaat en methods heeft die het helemaal niet ondersteunt en alleen maar heeft om checks te kunnen omzeilen dan mag het van mij ook wel via userAgent.

Wat die programmeurs bij Opera proberen te doen hiermee blijft me een volledig raadsel.

  • Brent
  • Registratie: September 2001
  • Laatst online: 10:33
RM-rf schreef op 03 augustus 2002 @ 10:15:
ik meen dat in opera ook window.opera een variabele is die dan true is, de userAgent is gewoon een string die steeds meer gefaked kan worden.

misschien nog beter is gewoon te kijken of window.external een object is, en eventueel of de AddFavorite method ondersteund wordt, de reden dat browsers de userAgent-string faken is dat scripts niet meer kijken naar werkelijke ondersteuning van methods maar enkel naar namen van browsers:
volgens mij ondersteund mijn msie5.2 namelijk dit ook niet (op mac)
thanx, met window.external lukt het wel! (geen AddFavorite nodig).
Bosmonster schreef op 03 augustus 2002 @ 10:28:
Wat die programmeurs bij Opera proberen te doen hiermee blijft me een volledig raadsel.
tsja, ik vind het ook als webmaster zijnde niet handig, je moet alleen maar meer moeite doen om de site goed op het scherm te krijgen.

Humanist | Kernpower! | Determinist | Verken uw geest | Politiek dakloos


  • RM-rf
  • Registratie: September 2000
  • Laatst online: 12:52

RM-rf

1 2 3 4 5 7 6 8 9

Bosmonster schreef op 03 augustus 2002 @ 10:28:
Wat die programmeurs bij Opera proberen te doen hiermee blijft me een volledig raadsel.
misschien hetzelfde als de programmeurs van internet Explorer ooit probeerden te bereiken door Mozilla in hun userAgent-string te zetten, met Compatible en werkelijke versie tussen haakjes ?

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 13:13

crisp

Devver

Pixelated

RM-rf schreef op 03 augustus 2002 @ 11:20:
[...]

misschien hetzelfde als de programmeurs van internet Explorer ooit probeerden te bereiken door Mozilla in hun userAgent-string te zetten, met Compatible en werkelijke versie tussen haakjes ?
Dat is gewoon wishfull thinking ;)

Intentionally left blank


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

RM-rf schreef op 03 augustus 2002 @ 11:20:
[...]

misschien hetzelfde als de programmeurs van internet Explorer ooit probeerden te bereiken door Mozilla in hun userAgent-string te zetten, met Compatible en werkelijke versie tussen haakjes ?
Zit toch wel verschil in denk ik. IE is altijd bedoeld als Mozilla compatible browser, net als we heel lang gesproken hebben over IBM-compatible computers.

bij Opera gaat het er meer om dat ze opzettelijk verkeerde identificatie meegeven en erger nog: dat je er tussen kan switchen of hem in de browser kunt editen. Nogal nutteloos als je toch niet alles ondersteunt van als wat je je identificeert.

Ook ronduit dom vind ik dingen als document.createElement(). Deze methode werd niet ondersteund en bestond ook niet in Opera 5. In Opera 6 hebben ze om checks te omzeilen en dus FOUTMELDINGEN TE VEROORZAKEN een lege createElement() methode in hun browser geplakt. Het ding doet niks, zit er alleen maar om developers te zieken heb ik het idee.

  • The Bad Seed
  • Registratie: November 2001
  • Laatst online: 31-08 08:50

The Bad Seed

Chaotic since 1983

Laat ik maar even de andere kant van het verhaal belichten: er zijn verschillende sites die het voor 100 of 99 % doen in Opera, maar waar de webdesigner een check heeft ingebouwd zodat enkel MSIE kan doorgaan. Dan is het best handig als je je die identificatiestring kan veranderen.

Hail to the guardians of the watchtowers of the north


  • Brent
  • Registratie: September 2001
  • Laatst online: 10:33
Duracell schreef op 03 augustus 2002 @ 11:46:
Laat ik maar even de andere kant van het verhaal belichten: er zijn verschillende sites die het voor 100 of 99 % doen in Opera, maar waar de webdesigner een check heeft ingebouwd zodat enkel MSIE kan doorgaan. Dan is het best handig als je je die identificatiestring kan veranderen.
Dat is zo, maar dan speelt Opera in op de onkunde van sommige webmasters. Dat lijkt me niet de bedoeling, zeker niet Opera, omdat dat toch een browsertje is wat zich redelijk strikt aan de regels houdt. Dit past er dan helemaal niet bij (en al helemaal niet als standaardinstelling).

Humanist | Kernpower! | Determinist | Verken uw geest | Politiek dakloos


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Duracell schreef op 03 augustus 2002 @ 11:46:
Laat ik maar even de andere kant van het verhaal belichten: er zijn verschillende sites die het voor 100 of 99 % doen in Opera, maar waar de webdesigner een check heeft ingebouwd zodat enkel MSIE kan doorgaan. Dan is het best handig als je je die identificatiestring kan veranderen.
Dat klopt en zal altijd zo blijven zolang de programmeurs van Opera dit soort onzin in zullen blijven bouwen. Ik checkte altijd netjes op de mogelijkheden van een browser, maar ik heb de hoop opgegeven voor Opera sinds de createElement misleiding. Op deze manier zullen ze nooit serieus voet aan de grond krijgen, als ze overal maar tussenin blijven hangen ipv een eigen identiteit vergaren.

  • RM-rf
  • Registratie: September 2000
  • Laatst online: 12:52

RM-rf

1 2 3 4 5 7 6 8 9

de document.createElement is een ander geval dan de userAgent-string; de eerste is een werkelijk grote fout van Opera, immers het gaat tegen een juiste methode van scripting in, het checken op het bestaan van objecten en methods.

het checken van de userAgent-string is een foute manier van browsercheck; een check op window.exeternal in dit geval is veel beter dan navigator.userAgent.indexOf("MSIE"), niet enkel wegens Opera, maar ook msie/mac levert anders foutmeldingen op.

je aversie tegen Opera, alhoewel gegrond heeft geen relatie tot dit probleem, en mag ook geen reden zijn om bij scripts die compatible zijn te maken en waar tijd voor is (Opera staat ook niet hoog op mijn lijst) dat niet te doen

je zou overigens Omniweb eens moeten zien: onder preferences: compatibility: kun je instellen exact welke userAgent string je wilt versturen, gescheiden tussen http-identificatie en javascript (met aparte waardes voor AppName, AppCodeName, Platform en AppVersion)
overigens staat hij standaard wel op Mozilla/4.5 (compatible, OmniWeb/4.1-v422; Mac_powerPC) ; waarvan ik niet weet of Mozilla 4.5 een bekende versie is?
maar je kunt ook voorgespecificeerde keuzes kiezen bv, msie5 -windows PC

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

RM-rf schreef op 03 augustus 2002 @ 12:22:

het checken van de userAgent-string is een foute manier van browsercheck; een check op window.exeternal in dit geval is veel beter dan navigator.userAgent.indexOf("MSIE"), niet enkel wegens Opera, maar ook msie/mac levert anders foutmeldingen op.
navigator.userAgent.indexOf("Opera") is iets wat altijd werkt en gewerkt heeft, ook voor oudere Opera versies (en levert geen problemen op Mac IE). Window.external enzo heb ik eigenlijk nooit naar gekeken.. Het is blijkbaar een Opera-only iets? Leg dan eens uit wat het doet en in welke versies een check hierop zou werken?

  • Brent
  • Registratie: September 2001
  • Laatst online: 10:33
Bosmonster schreef op 03 augustus 2002 @ 13:00:
[...]

navigator.userAgent.indexOf("Opera") is iets wat altijd werkt en gewerkt heeft, ook voor oudere Opera versies (en levert geen problemen op Mac IE). Window.external enzo heb ik eigenlijk nooit naar gekeken.. Het is blijkbaar een Opera-only iets? Leg dan eens uit wat het doet en in welke versies een check hierop zou werken?
indexOf Opera werkt dus niet altijd (ziehier). en bovendien ging het om een scheiding van IE en de rest. En niet van IE, Opera en de rest.

window.external is een IE-only iets, en als je if (window.external) doet, checktie of de browser die functie ondersteund (in dit geval alleen IE). zo kun je dus makkelijk IE van de rest scheiden.

Humanist | Kernpower! | Determinist | Verken uw geest | Politiek dakloos


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Breepee schreef op 03 augustus 2002 @ 14:12:
[...]
indexOf Opera werkt dus niet altijd (ziehier). en bovendien ging het om een scheiding van IE en de rest. En niet van IE, Opera en de rest.

window.external is een IE-only iets, en als je if (window.external) doet, checktie of de browser die functie ondersteund (in dit geval alleen IE). zo kun je dus makkelijk IE van de rest scheiden.
Er wordt beschreven hoe "Opera 6" faalt, maar "Opera" alleen werkt wel. En Opera is het enige wat je imho hoeft te weten.

Als je IE wilt kun je simpel weg checken op document.all en (userAgent.indexOf("Opera"<0)

  • Brent
  • Registratie: September 2001
  • Laatst online: 10:33
Bosmonster schreef op 03 augustus 2002 @ 15:13:
[...]

Er wordt beschreven hoe "Opera 6" faalt, maar "Opera" alleen werkt wel. En Opera is het enige wat je imho hoeft te weten.

Als je IE wilt kun je simpel weg checken op document.all en (userAgent.indexOf("Opera"<0)
opera 6 faked ook document.all en dan werkt Opera <0 ook niet meer.

Nee, de enige oplossing die ik kon vinden is window.external

Humanist | Kernpower! | Determinist | Verken uw geest | Politiek dakloos


  • RM-rf
  • Registratie: September 2000
  • Laatst online: 12:52

RM-rf

1 2 3 4 5 7 6 8 9

Bosmonster schreef op 03 augustus 2002 @ 13:00:
[...]

navigator.userAgent.indexOf("Opera") is iets wat altijd werkt en gewerkt heeft, ook voor oudere Opera versies (en levert geen problemen op Mac IE). Window.external enzo heb ik eigenlijk nooit naar gekeken.. Het is blijkbaar een Opera-only iets? Leg dan eens uit wat het doet en in welke versies een check hierop zou werken?
eh, window.external zijn al die msie-pc-security overtredende methods, en bstaat dus niet in opera alswel in msie/mac, daar direct op controleren als je het wil toepassen is beter dan enkel een check op de browser waarvan je denkt dat deze dat ondersteund

niet enkel kan opera, en nog wat andere browsers hun userAgentstring volledig faken, deze string is allerminst bedoeld voor een clientside browsercheck; serverside soit, maar als je methods wilt gebruiken, zoals hier de window.external.addFavorite() heeft het nut om direct hierop te checken, en geen browsercheck via userAgent toe te passen.

sowieso is het beter browserchecks te gebruiken die gewoon op ondersteuning methods controleren, dan dit te doen via browserchecks op naam, dat dit met createElement fout gaat in Opera is hun fout en gebruikers kiezen daarvoor. Dat is een bewuste keus van de ontwikkelaar (en er is gen enkele relatie tussen het 'faken' van de userAgent en de onterechte ondersteuning voor document.createElement, dat staat los van elkaar)

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Breepee schreef op 03 augustus 2002 @ 15:14:
[...]
opera 6 faked ook document.all en dan werkt Opera <0 ook niet meer.

Nee, de enige oplossing die ik kon vinden is window.external
?? Dat slaat nergens op. Ja hij ondersteunt document.all, DAAROM moet je om Opera eruit te filteren ook even checken of het niet Opera is in IE-emulatie mode.

  • Brent
  • Registratie: September 2001
  • Laatst online: 10:33
Bosmonster schreef op 03 augustus 2002 @ 15:21:
[...]

?? Dat slaat nergens op. Ja hij ondersteunt document.all, DAAROM moet je om Opera eruit te filteren ook even checken of het niet Opera is in IE-emulatie mode.
nouja, hoe het precies zit in de motor van opera weet ik niet, maar wat jij zegt werkt iig niet. bovendien is checken op windows.external veel makkelijker.

Humanist | Kernpower! | Determinist | Verken uw geest | Politiek dakloos


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 13:13

crisp

Devver

Pixelated

ff clean and out; als Opera 'true' terug zou geven op 'windows.external'; maar er vervolgens niets mee doet. Dan heb je dus een probleem.
Gelukkig geeft Opera hier een 'false' op terug, maar aan de andere kant geeft het wel een 'true' terug op 'window.createElement', terwijl het daar ook niets mee doet. Dat is dus een kwalijke zaak; 'faken' dat je een bepaalde method ondersteund terwijl dat niet zo is...

Intentionally left blank

Pagina: 1