Gå til innhold

kode for browserdefined stylesheets


Anbefalte innlegg

Skrevet

Er det noen som har en liten kodesnutt som finner ut hvilken browser du bruker, og ut ifra det velger stylesheet? Vet det skal finnes her på forumet men finner det ikke..

Videoannonse
Annonse
Skrevet

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]-->

Skrevet

$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.

Skrevet (endret)

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
Skrevet

Hva med å bare legge alle i html'en som alternate stylesheet. Da kan bruker skifte stylesheet uten at han må laste om siden.

Eller kanskje ikke ie støtter dette, hadde jo vært litt typisk.

Skrevet (endret)
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
Skrevet (endret)
<?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
Skrevet

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 :)

Skrevet

Tror det er en ting du bude få med deg dabear, her i PHP forumet svarer vi ikke på den måten! Du kommer med dårlig kritikk og et par av punktene du klager på har utrolig lite å si.

Skrevet (endret)

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
Skrevet (endret)

Må nok stille meg bak Findus her, det er nok et tips som vil ha ekstremt lite å si for ytelsen til et script og derfor ikke verdt å få folk til å endre vane. Merk at alle programmerere har sine vaner ;)

Endret av ????????
Skrevet (endret)
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
  • 2 uker senere...
Skrevet

er det noen mulighet og få til det samme, med plattform (operativsystem) i stedet for browser for å skille hvilket css som skal brukes?

Skrevet

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. ;)

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...