[PHP] Detect alles wat niet-IE is

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 08:41

Kaastosti

Vrolijkheid alom!

Topicstarter
Ik heb hier een aantal topics over gelezen, php.net geraadpleegd en de links daar doorgewerkt. Toch krijg ik het maar niet goed werkend. Met goed bedoel ik dan dat zowel IE5, IE6 en Netscape6 op PC _en_ IE en Netscape op de MAC goed gedetecteerd worden.

Voor de detectie wil ik gebruik maken van een functie binnen PHP. Nu is daar get_browser() voor, echter deze vereist wat extra configuratie (dat heb ik tenminste begrepen op php.net).

De bedoeling is dat, als de browser niet-IE is (daaronder vallen dus Netscape, Mozilla, Opera, Konqueror etc. etc.) een andere template file geladen wordt dan wanneer dit wel zo is.

Hier wat ik ongeveer geprobeerd heb:
PHP:
1
$isns = stristr($HTTP_USER_AGENT, "Mozilla") && (!(stristr($HTTP_USER_AGENT, "compatible")));

Hiermee krijg ik, ook in IE, altijd te zien dat het Netscape is

PHP:
1
$ua = get_browser ();

Hier kan ik uberhaupt geen informatie uit halen. Er zit niets in de variabele, maar ook is het geen array.

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

IE heeft in de useragent MSIE staan volgens mij...

Maar is het niet handiger je html zo op te bouwen dat het browseronafhankelijk werkt? Dat schijnt ook wel enigszins mogelijk te zijn, getuige GoT en tweakers.net ;)
En als je IE hebt, controleer je dan ook wel op IE5 of 6? Want 4 is weer minder compatibel enzo ;)

[ Voor 23% gewijzigd door ACM op 23-05-2003 11:02 ]


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 08:41

Kaastosti

Vrolijkheid alom!

Topicstarter
Maar is het niet handiger je html zo op te bouwen dat het browseronafhankelijk werkt?
Daar ben ik al 3 weken mee bezig... het is onmogelijk, aangezien Netscape zich niet aan de standaard houdt wat betreft layers. Dit is de laatste mogelijkheid :)

En inderdaad moet ik ook een versiecheck doen, aangezien het IE5.0+ comp. moet zijn.

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Netscape 4 is de enige die echt roet in het eten gooit, wij hebben er dan ook voor gekozen die niet meer te ondersteunen :) Die wordt al zo weinig gebruikt enzo, laat men maar naar netscape 7 of mozilla overstappen.

[ Voor 28% gewijzigd door ACM op 23-05-2003 11:05 ]


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 08:41

Kaastosti

Vrolijkheid alom!

Topicstarter
Ook netscape 7 geeft problemen met divs in divs... doet dingen die absoluut niet mogen. Hetgeen ik naar op zoek ben is een (bijna) waterdichte check om te kijken of een browser IE5+ is of niet. Dat zijn de enige twee mogelijkheden. Ik kan dus waarschijnlijk beter op de eerste checken, dan op alle mogelijkheden die tot niet-IE behoren.

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 12-09 14:21

koli-man

Bartender!!!!

offtopic:
Netscape wordt nog maar door 3% van de internetgebruikers gebruikt dacht ik zo. En volgens mij worden bij de rest van de browsers wel de standaards voor de layers gebruikt dus waarom doe je zoveel moeite?
Het is wel mooi ja als het werkt, maar...het kost erg veel tijd denk ik.

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Dat lukt je sowieso niet het staat een browser vrij mee te sturen wat ie maar wil als useragent :)

Checken of er MSIE instaat maakt het automatisch voor eigen risico, als iemand zijn browser zo nodig zo moest instellen dat ie 'doet alsof ie IE is' heeft ie gewoon pech :)

Acties:
  • 0 Henk 'm!

  • cdgrit
  • Registratie: Mei 2002
  • Laatst online: 13-01 16:44
ACM schreef op 23 May 2003 @ 11:10:
als iemand zijn browser zo nodig zo moest instellen dat ie 'doet alsof ie IE is' heeft ie gewoon pech :)
Als ik me niet vergis doet Opera dat standaard... Best vervelend voor webmasters eigenlijk!

[ Voor 3% gewijzigd door cdgrit op 23-05-2003 11:13 ]


Originele startpagina - Stadindex.nl


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 08:41

Kaastosti

Vrolijkheid alom!

Topicstarter
Een browsercheck en 2 verschillende templates is m'n laatste optie, en tegelijkertijd ook meteen het meest efficient en overzichtelijk. Anders krijg ik uiteindelijk html die zich op allerlei manieren aanpast. Natuurlijk erg mooi en generiek, maar niet echt meer lekker werkbaar.

Waarin ik bouw ik een combinatie van PHP / SMARTY / JavaScript en Html (waarin ik de hoeveelheid javascript zoveel mogelijk probeer te beperken). Javascript vindt pas plaats in de html en is dus in dit geval niet handig. Daarom wil ik de check al in de php doen, zodat ik naar aanleiding van de uitkomst er van een index_ie.tpl of index_nn.tpl ga laden :)

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Kaastosti: je geeft het wel snel op vind ik hoor.
En verder is het over het algemeen IE die zich niet aan de standaarden houd (floats die ruimte innemen binnen de containing block, wazige spacing om floating images, geen ondersteuning voor min en max-height, table-cells als blocks beschouwen etc).
Ik zal vanavond of anders morgen nog wel even naar je W&G topic kijken; ik ben van mening dat het wel degelijk mogelijk is om zowel in Mozilla/NS als in IE hetzelfde resultaat te behalen met dezelfde code

[ Voor 16% gewijzigd door crisp op 23-05-2003 11:24 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 08:41

Kaastosti

Vrolijkheid alom!

Topicstarter
Dat is het probleem niet hoor crisp, de floats werken helemaal goed :)
Ik dacht dan ook dat ik het gisteren helemaal klaar had... totdat m'n stagebegeleider naar me toe kwam met de mededeling dat er op MAC IE, Netscape, Opera e.d. problemen waren met de weergave van m'n menu. Deze problemen werden voornamelijk veroorzaakt door de layers die er in zitten voor het uitklapmenu.

Die layers gaan gewoon niet werken met Netscape. Niet met 4, 5, 6 of 7. Ik heb ze allemaal getest, en alles gaat de mist in bij Netscape. Nu hebben ze daar niet echt een groot probleem mee, als ik maar iets heb waardoor er ook in Netscape mee te werken blijft. Ik schakel dus gewoon de layers uit...

Om dat te kunnen doen is die detectie nodig. Daar ben ik gisteravond / vandaag mee bezig geweest, maar echt goed onderscheid maken tussen IE en niet-IE komt er maar niet doorheen. IE is spontaan Netscape geworden en Netscape vindt dattie best wel een beetje IE is :?

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Vreemd.. nooit problemen mee.. maar is het niet makkelijker om als je dan toch de 'makkelijke weg' van detectie kiest omdat dan ook clientside te doen?

Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 08:41

Kaastosti

Vrolijkheid alom!

Topicstarter
Ik probeer nu ook om, in plaats van een php-functie, een javascript functie binnen de php uit te voeren. Binnen die javascript functie even snel <? $browser = "nn"; ?> er tussen zetten, en daarna naar aanleiding van de waarde van $browser een template te laden.

In Netscape krijg ik nu netjes een popup met 'Netscape' en in IE eentje met 'IE', echter wordt er geen andere template gedaan :? Code nagegaan... en hij _moet_ wat anders laden, maar weigert.

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Netscape 5? mag ik daar een kopietje van, da's een collectors item! ;)
NS4 kan ik me voorstellen, NS6 is gebaseerd op Mozilla 0.9.4 meen ik, dus kan idd wel wat buggy zijn, MAC IE is ook een rampproduct en Opera 6 zuigt ook zwaar.
Blijft over Mozilla, Opera 7 en NS7 (tot zekere hoogte - want gebaseerd op Moz 1.0) die in mijn ogen prima met div's om kunnen gaan.
Als de eerstgenoemde browsers echter ook ondersteund moeten worden, dan kan je inderdaad tegen problemen aanlopen.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Kaastosti schreef op 23 May 2003 @ 11:36:
Ik probeer nu ook om, in plaats van een php-functie, een javascript functie binnen de php uit te voeren. Binnen die javascript functie even snel <? $browser = "nn"; ?> er tussen zetten, en daarna naar aanleiding van de waarde van $browser een template te laden.

In Netscape krijg ik nu netjes een popup met 'Netscape' en in IE eentje met 'IE', echter wordt er geen andere template gedaan :? Code nagegaan... en hij _moet_ wat anders laden, maar weigert.
Jij denkt dat als je php code in javascript zet, dat tijdens het uitvoeren van dat javascriptje ook nog eventjes die php code op de server wordt uitgevoerd?

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 08:41

Kaastosti

Vrolijkheid alom!

Topicstarter
In principe moet een site natuurlijk op iedere browser werken. Door de technieken die er de afgelopen jaren bij zijn gekomen en dus niet ondersteund worden, is het echter bijna onmogelijk geworden. Wel kun je natuurlijk een aantal alternatieve versies aanbieden voor verschillende browsers. Dat is dan ook precies wat ik wil doen.

Het gedeelte coding qua php zit goed in elkaar, daar blijf ik nu met m'n fikken van af. Het gaat alleen nog om de template. Daar heb ik er nu dus twee van. 1 met, en 1 zonder layers.

Overigens zat ik al te twijfelen of ik die 5 er nou tussen zou zetten bij Netscape ;) We hebben hier een PC staan met veel verschillende browsers en browserversies, waar alles op te testen is. Ik heb er zoveel browsers overheen gegooid dat ik niet meer wist welke versies het waren... alhoewel ik me niet kon heugen ooit NS5 gezien te hebben. Ach, voor het idee, ik heb er veel gehad iig ;)

--
Nee, ik voer javascript code uit binnen php, waarbij ik dus bij iedere if/else even een stukje php er weer tussendoor frot :)

[ Voor 8% gewijzigd door Kaastosti op 23-05-2003 11:41 ]

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Kaastosti schreef op 23 mei 2003 @ 11:36:
Ik probeer nu ook om, in plaats van een php-functie, een javascript functie binnen de php uit te voeren. Binnen die javascript functie even snel <? $browser = "nn"; ?> er tussen zetten, en daarna naar aanleiding van de waarde van $browser een template te laden.

In Netscape krijg ik nu netjes een popup met 'Netscape' en in IE eentje met 'IE', echter wordt er geen andere template gedaan :? Code nagegaan... en hij _moet_ wat anders laden, maar weigert.
Dus je gaat met de beperkte informatie die je serverside hebt (UA) iets sturen naar javascript... terwijl javascript bergen informatie zelf heeft om de browser te detecteren :?

Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 08:41

Kaastosti

Vrolijkheid alom!

Topicstarter
Nee nee, ik haal niets meer server side. Ik haal het nu clientside met javascript op, en zet het resultaat in een php variabele.

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Kaastosti schreef op 23 May 2003 @ 11:43:
Nee nee, ik haal niets meer server side. Ik haal het nu clientside met javascript op, en zet het resultaat in een php variabele.
je stuurt het dus door naar de server dmv een redirect oid?
zo niet, dan heb je het client-serverside principe niet begrepen: op het moment dat de javascript op de client wordt uitgevoerd is PHP al lang klaar, en wacht alleen maar op een eventuele volgende request.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 08:41

Kaastosti

Vrolijkheid alom!

Topicstarter
Het zit nu als volgt in elkaar (ongeveer dan):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
wat code
?>
<javascript browser detectie>
  <als netscape>
    <popup 'Netscape'>
    <? $browser = "nn"; ?>
  <anders>
    <popup 'IE'>
    <? $browser = "ie"; ?>
<einde javascript>
<?
echo $browser."<br>";
if($browser == "nn")
{
  smarty->display('index_nn.tpl');
}
else
{
  smarty->display('index_ie.tpl');
}


Ik krijg bij echo $browser altijd IE te zien, terwijl de popup in de javascript code netjes 'Netscape' aangeeft. Dat kan inderdaad te maken hebben met de volgorde waarin de code wordt uigevoerd. Dan zou alles inderdaad op IE komen. In dat geval is javascript binnen php dus ook geen optie.

Dan val ik terug op een functie binnen php...

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

En lees nu de reactie van crisp nog eens door :)

ik zou iig zoiets gebruiken:
PHP:
1
2
3
4
is_ie()
{
  return strpos('MSIE', $_SERVER['USER_AGENT']) !== false);
}


En zoveel mogelijk proberen de html generiek te maken.

Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 08:41

Kaastosti

Vrolijkheid alom!

Topicstarter
Aaaah kijk zo'n functie was ik dus naar op zoek. Tenminste... het idee er achter dan :)
strpos($haystack, $needle)... moesten dus andersom. Maar het werkt wel... nu nog op 'alternatieve' versies van IE en Netscape loslaten. Thx :)

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Met een uitsplitsing IE/non-IE ben je er natuurlijk niet. Er zullen best non-IE browsers zijn die de 'IE'-versie prima kunnen weergeven; je zou je bezoekers tekort doen door ze dan de simpele versie voor te schotelen.
Aan de andere kant zijn er natuurlijk ook prehistorische IE versies (als je NS4 ondersteund moet je natuurlijk ook IE4 ondersteunen) die waarschijnlijk helemaal geen koek kunnen bakken van je 'IE'-versie...

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 08:41

Kaastosti

Vrolijkheid alom!

Topicstarter
Ik kan later altijd nog meer gespecificeerde versies maken. Op dit moment vind ik een IE / NS splitsing al even voldoende... het werkt in ieder geval, en op deze manier kan ik ook andere checks uitvoeren.

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • ThaDaNo
  • Registratie: Mei 2002
  • Laatst online: 05-04-2023
Als je ff had gezocht had je een topic gevonden hier van een user die een script heeft gemaakt dat vrijwel alle browsers kan herkennen. dat zou je kunnen gebruiken

Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 08:41

Kaastosti

Vrolijkheid alom!

Topicstarter
Hmmm ik heb gezocht op 'php browser check', maar daar kwam natuurlijk niet echt veel nuttigs uit, aangezien de meeste detecties met javascript werken. Aangezien ik echt naar iets in php zocht, heb ik niet verder gekeken... was misschien toch handig geweest ;)

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.

Pagina: 1