Gå til innhold

kode for browserdefined stylesheets


Anbefalte innlegg

Videoannonse
Annonse

Det er altfor usikkert. server variabelen USER_AGENT er den du er ute etter, men denne kan lett endres av brukeren. Derimot så viser alle browsere untatt IE html likt (untatt margin, pading, border og noen ting til). Hvis du vil bruke en ekstra style til IE bruker du noe sånt som:

<!--[if ie]
kode her

[endif]-->

Lenke til kommentar

$browser = $_SERVER['HTTP_USER_AGENT'];

if (eregi("firefox", $browser)) {
// Du bruker Firefox 1.0
}
elseif (eregi("opera", $browser)) {
// Du bruker opera...
}
osv..

 

Den funker sånn passe bra, men det finnes ingen 100% sikre metoder siden de fleste nettlesere har muligheten til å identifisere seg som noe annet (Opera identifiserer seg f.eks som IE som default).

 

Lag et lite script som echo'er $_SERVER['HTTP_USER_AGENT'] for å se hvordan de forskjellige browserene identifiserer seg - det er mye rart fra browser til browser og fra versjon til versjon, så det er umulig å lage et idiotsikkert script.

Lenke til kommentar

Hvis jeg vil at den skal bruke en spesiell stylesheet bare hvis brukeren har opera, kan jeg da gjøre det sånn?

 

<?php $browser = $_SERVER['HTTP_USER_AGENT'];

if (eregi("opera", $browser)) {
echo ""<link href="opera.css" rel="stylesheet" type="text/css">"";
}
else {
echo ""<link href="style.css" rel="stylesheet" type="text/css">"";
}
?>

 

EDIT; Fikk parse error på den..

 

Parse error: parse error, unexpected T_STRING, expecting ',' or ';' in c:\appserv\www\nisselink\testsie.php on line 8

 

Hvordan fikser jeg det?

Endret av Tha_Zaynt
Lenke til kommentar
Det ser nesten bra ut, to ting bare - hvorfor har du to " etter echo og så må du escape " i href=\"

Er ikke sikker på hvordan jeg escaper..kan du hjelpe meg litt *trykke inn med teskje*?

 

@findus: Må man laste om siden for at dette skal funke da? Trodde denne koden valgte stylesheet slik at man slapp det...Poenget med at jeg gjør det slik er at siden min ikke ser bra ut i Opera på "standard" css'n min, og hvis jeg lager det slik at brukeren velger stylesheet må jegg inn med unødvendige og stygge knapper..dessuten er det ikke sikkert at brukeren skjønner at han/hun må skifte stylesheet for at det skal se bra ut..

 

EDIT; Gjorde det slik, og det funka fett!

<?php $browser = $_SERVER['HTTP_USER_AGENT'];

if (eregi("opera", $browser)) {
echo "<link href=\"opera.css\" rel=\"stylesheet\" type=\"text/css\">";
}
else {
echo "<link href=\"style.css\" rel=\"stylesheet\" type=\"text/css\">";
}
?>

Endret av Tha_Zaynt
Lenke til kommentar
<?php $browser = $_SERVER['HTTP_USER_AGENT'];

if (eregi("opera", $browser)) {
echo "<link href=\"opera.css\" rel=\"stylesheet\" type=\"text/css\">";
}
else {
echo "<link href=\"style.css\" rel=\"stylesheet\" type=\"text/css\">";
}
?>

Vil si at den koden der er-unskyld uttrykket-rævva.Du bruker eregi istedet for stristr ev. strstr, og du bruker dobbeltfnutter når det ikke er noe newline/tabs/variabler i teksten. Som jeg tidligere sa, kan $_SERVER['HTTP_USER_AGENT']; lett endres i fks firefox eller til og med opera (der blir opera med istringen likevell da). Kan heller ikke skjønne at sida di ser så mye dårligere ut i opera, da er det mest sansynlig DU som har koda feil. Skal du bruke en slik kode i det hele tatt, bruk denne:

 

<?php

$browser = $_SERVER['HTTP_USER_AGENT'];

if (stristr('opera', $browser))
{
   echo '<link href="opera.css" rel="stylesheet" type="text/css">';
}
else
{
   echo '<link href="style.css" rel="stylesheet" type="text/css">';
}
?>

 

Dette er forøvrig noe alle burde få med seg, man bruker kun dobbeltfnutter der det er nødvendig, og det er ganske sjelden!

Endret av dabear
Lenke til kommentar

Om man bruker dobbeltfnutter eller ikke er da smakssak mye godt.

Bortsett fra at man da i tilfeller må bruke dobbeltfnutter og ikke kan bruke enkeltfnutter.

 

Jeg tror jeg leste litt feil på tråden når jeg sa det med "alternate stylesheet" tenkte du mente at du skulle tilby flere stilark til brukeren, ikke at det var agent spesifikke stilark.

Så da gjelder ikke mitt forslag lenger :)

Lenke til kommentar

Det å bruke dobbeltfnutter er faktisk noe man bør begrense bruken av. Ofte slipper man å escape så mange bokstaver (særlig om man outputter HTML-kode, men da foretrekker jeg heredoc-syntaksen). Det som er greia med enkeltfnutter er at PHP bare bruker/outputter strengen uten å gjøre noe mer med den. Om du bruker dobbeltfnutter så må PHP lete gjennom hele strengen etter variabler, noe som kan bli en tidkrevende prosess i while-looper o.l.

Endret av Lokaltog
Lenke til kommentar
Kan heller ikke skjønne at sida di ser så mye dårligere ut i opera, da er det mest sansynlig DU som har koda feil.

1. Ofte er det slik at forskjellige nettlesere tolker koding forskjellig uansett hvor riktig det enn måtte være. Og da hender det ofte at siden ikke vises slik at du vil den skal vises. I mitt tilfelle var det at margin -verdien i css'n min av en eller annen grunn ble tolket annerledes i opera enn i IE og Firefox, derfor laget jeg et eget stilark til Opera....

 

2. For å være helt ærlig, unnskyld uttrykket, så driter jeg mest i om jeg bruker dobbelfnutter eller ikke når det er snakk om en slik liten kodesnutt så lenge det fungerer, og ikke tar alt for lang tid å prosessere.

Endret av Tha_Zaynt
Lenke til kommentar
  • 2 uker senere...

PS: Husk at firefox før v1.0 ikke har "Firefox" med i UA-strengen. Du bør heller bruke "gecko", siden den brukes av firefox både før og etter v1.0. Ulempen er at du tar med Mozilla Suite også, men den har så lik rendering-motor at det er stort sett greit. ;)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...