@codenerd på twitter Mit seneste tweet:

Om Norton, IE og de perversiteter det medbringer

Til alle jer Norton brugere! I er da også besværlige. Har en kammerat, vis hjemmeside ikke kunne vises ordenligt hos folk med Norton indstalleret, meget mystisk? Efter en del research fandt jeg frem til at Nortons ad-blocking og popup blocking indsætter et stykke javascript i alle hjemmesider man besøger… nåhh ok og hvad så tænker du måske? Problemet er sådan set ikke at Norton indsætter denne kode, men mere hvor Norton indsætter den. Problemet opstår idet at koden bliver indsat før dokumentets doctype, hvilket betyder at fx IE går i Quirksmode – og det er absolut ikke en rar ”mode” at være i, CSS fortolkes helt hen i vejret, og webstandarderne er smidt helt overstyr. Hvad gør man så? Ja man kunne jo bede alle bruger af Norton om at smide skidtet ud – nok ikke en holdbar løsning, folk er af en eller anden grund jo glade nok for deres Norton barn. Hvad gør vi så?
Ja, så må vi jo akkommodere disse perversiteter. Koden norton indsætter er:

PHP
1
2
3
4
5
6
7
<script language="JavaScript">
function SymError()
{
return true;
}
window.onerror = SymError;
</script>

Altså en totalt ligegyldig funktion som vi ikke rigtigt kan gøre noget ved – den er der bare! Når det så kom til min side betød ovenstående kode at min hjemmeside ikke længere var centreret i IE (når den blev besøgt af en med Norton) samt at mit banner stod helt forkert – ergo må jeg jo ha’ et stylesheet på til folk med Norton og IE, men hvordan finder vi lige ud af om folk har Norton? Jo det er som meget enkelt, hvis de har det vil SymError funktionen eksistere, og et kald til denne vil retunere true – derfor nedenstående kode:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script type=?text/javascript?>
window.onload=function() { /* Funktion skrevet af Martin Nielsen - detect IE og norton kode og attach et stylesheet */
    var test=window.SymError?true:false; //find ud af om SymError funktionen er indsat
    if (test && document.all) { //hvis test og document.all (ie specifik)
        alert('Debugmsg: Fandt Norton kode og Internet explore - browseren er nu i quirksmode'); //lige en tester besked
        var nyCSS = document.createElement('link'); //opret nyt element
        nyCSS.setAttribute('rel', 'stylesheet'); //ny attribut - rel
        nyCSS.setAttribute('type', 'text/css'); //ny attribut - type
        nyCSS.setAttribute('href', '/css/quirks_ie.css'); //ny attribut - link til stylesheet
        nyCSS.setAttribute('media', 'screen,projection');//ny attribut media for stylesheetet
        document.getElementsByTagName('head')[0].appendChild(nyCSS); //tilføj det nye stylesheet i head
        
    }
};
</script>

Koden bliver kaldt når dokumentet loades (og bør placeres i head), og checker om browseren er internet explore samt om SymError() funktionen eksisterer. Hvis dette er tilfælde indlæses et ekstra stylesheet (css/quirks_ie.css) som korrigerer de fejl der var.

Meget bitret at skulle lave den slags cirkus-kunster, fordi Norton ikke har tænkt sig om!

2 kommentarer

Leave a Reply to PaW^ Cancel reply

Krævede felter er markeret med *.

*