27. august 2012 - 09:10Der er
22 kommentarer og 1 løsning
Tilføje ekstra IDs til fungerende script.
Hej,
Jeg har lavet et lille script der detekter en IDs højde. Det ser sådan her ud: if(document.getElementById("adsense").offsetHeight==0) { document.getElementById("adsense").innerHTML="<strong style='color: red; padding:12px;'><span style='font-size: 24px;'>Ups, det ser ud til at du blokerer vores reklamer!</span><br /><br />Det er altså ikke pænt gjort...<br />Slå venligst din Ad Block fra når du besøger Stoker Pro!</strong>"; }
Det virker fint nok, men jeg vil gerne have mulighed for at tilføje 2 mere IDs
$(".ads").each( function(intIndex){ if($(this).offset().top == 0) { $(this).innerHTML="<strong style='color: red; padding:12px;'><span style='font-size: 24px;'>Ups, det ser ud til at du blokerer vores reklamer!</span><br/> <br/>Det er altså ikke pænt gjort...<br />Slå venligst din Ad Block fra når du besøger Stoker Pro!</strong>"; } } );
Så skal du bare tilføje ads som class til dine adsense elementer. Har ikke selv testet koden, så kan være fejl.
$(".ads").each( function(intIndex){ if($(this).offset().top == 0) { $(this).html("<strong style='color: red; padding:12px;'><span style='font-size: 24px;'>Ups, det ser ud til at du blokerer vores reklamer!</span><br/> <br/>Det er altså ikke pænt gjort...<br />Slå venligst din Ad Block fra når du besøger Stoker Pro!</strong>"); } } );
Glemte lige at konvertere innerHTML til jQuery :) Denne burde virke.
- og så ville det være fikst at vælge en mere specifik selector. Det kan næppe gøres mere ineffektivt end at bruge $(".ads"), som jo bevirker, at scriptet tvinges ud og undersøge hvert eneste HTML-element i hele dokumentet for at finde de ønskede par elementer.
Det kræver dog lidt flere oplysninger at skrive en mere realistisk kode =)
Scriptet bruges til at undersøge om brugeren bruger en ad-blocker. Det gøres ved at finde ud af om højden på specificerede IDer er 0.
Jeg er gået fra jquery da det jo kræver at man inkluderer en js fil som jo kan blokeres.
Lige pt ser hele scriptet således ud. Jeg er tilfreds med det, men vil bestemt gerne høre om det kan sammenskrives: function gandalf() { if(document.getElementById("adsense").offsetHeight==0) { document.getElementById("adsense").innerHTML="Bla bla bla"; } if(document.getElementById("adsensebund").offsetHeight==0) { document.getElementById("adsensebund").innerHTML="Bla bla bla"; } }
"Jeg er gået fra jquery da det jo kræver at man inkluderer en js fil som jo kan blokeres." >> Det forstår jeg ike =)
Der er intet i vejen med at bruge jQuery. Det kræver bare, man er (mindst) lige så god til JavaScript og DOM, som hvis man ikke bruger jQuery. Ellers kommer man let til at skrive jammerlig kode, uskyldigt forklædt som god kode *o)
Performance mæsssigt tager det nu ikke længe at finde alle elementer med jquery vha classnavn, eller, der skal virkeligt et forældet apparat/browser til før det har noget at sige, er der flere 1000 elementer kan det selvfølgeligt måles.
Alternativt benyt:
$('div').filter('.ads') det går væsentligt hurtigere.
Undskyld, men det er noget vrøvl. Naturligvis tager det væsentligt længere tid at traversere bunker af elementer og spørge på hvert enkelts className - end det gør at kalde to elementer direkte med getElementById.
Det er ikke uden grund, at MS i årevis af performanceårsager har anbefalet at undgå document.all til fordel for document.getElementById ... og jQuery's traversering efter className er langt mere ineffektiv end document.all!
Derudover er 1000 elementer langtfra noget særsyn. Oven i købet indeholder moderne websider langt flere elementer 2 sekunder efter sideload, end der stod i koden. Jeg har ikke talt efter, men det ville undre mig, om der er under 2.000 elementer på den side, vi skriver ind i her =)
Det er forhåbentlig langt hinsisdes enhver debat, at vi i dag bør bruge fremgangsmåder, der er bedre end dem, vi brugte i midten af 90'erne *o)
Console: Wed Aug 29 2012 18:55:53 GMT+0200:272 Wed Aug 29 2012 18:55:53 GMT+0200:283 Ole der er 1450 elementer i DOM, det tog hele 11ms.
for mig tager det 11-15ms at "traversere" igennem alle de noder der er her på experten.dk
Det er sizzle CSS selector jquery benytter, du kan jo sikkert sagtens skrive noget der er bedre,men vi andre må nøjes med det rådne open source project.
Så, så længe det vi taler milisekunder, vil jeg stadig anbefale alle andre end dig, der sagtens kan skrive noget bedre, at benytte jquery. Der er 1000 andre ting der kan tunes på en hjemmeside for at opnå performance, end lige at ungå at inkludere de 19kb jquery. Ovenstående link viser jo fint at det ikke er jquery der giver svartider på 3 sekunder her på exp, men alle de skide externe referencer til js ads.
Hvis du havde besværet dig med at læse tråden, ville du også vide, at dine anbefalinger er så ganske overflødige. Jeg skriver jo netop, at der intet er i vejen for at bruge jQuery - det gør jeg af og til selv - men derfor behøver man ikke nødvendigvis bruge det på den mest ineffektive måde.
Det undrer mig, du med så ihærdig en indsats ønsker at kæmpe mod det synspunkt. Somme kunne synes, der ville være mere oplagte synspunkter at være uenig i =)
Meget sjovt eksempel, der viser noget om noget helt andet end det, vi taler om i denne tråd. Skal eksemplet vise noget relevant, skal der ledes efter nogle elementer med et bestemt className.
Spar din sarkasme, til du kan opstille et relevant eksempel i første hug *o)
"Ovenstående link viser jo fint at det ikke er jquery der giver svartider på 3 sekunder her på exp"
'No shit, Sherlock!' ... det er der jo heller ingen, der har påstået =)
Aha, det vidste jeg ikke :) Jeg har aldrig rigtig kigget på adblockers.
Jeg tænkte bare når jQuery også bare er javascript, kan det vel kun blokeres ved at deaktivere javascript.
Men hvis de blokerer jQuery pga. det ligger i en seperat fil, kan man vel i princippet bare smide hele jQuery-koden direkte ind i sit template, og derved have jQuery uden at loade det fra en fil? :) Det vil dog se noget rodet ud ja :D
#16: Betyder den frygt, at du slet ikke anvender remote JS-filer i dine applikationer? Det lyder som noget af en overreaktion.
Jeg har aldrig set en browserudvidelse, som læser en remote JS-fil igennem for at afgøre, om den må inkluderes. Hvis du tænker på en udvidelse, der helt afskærer browseren fra at importere remote filer, bør man lade det være brugerens problem, at vedkommende ikke vil deltage i den almindelige brug af WWW =)
Når jeg brugte ordet 'frygt', var det for at være lidt modereret. Jeg bruger gerne ordet 'paranoia' i stedet, hvis du - som jeg - synes, det dækker bedre =)
"Bare ikke i forbindelse med anti ad-block systemet." >> Hvorfor dog ikke? Kender du en AdBlock'er, der læser JS-filen igennem og undersøger, hvad den indeholder/gør? Hvis filen ligger under dit eget domæne og ikke hedder jquery.js, har jeg svært ved at se problemet.
Derudover tvivler jeg på, der er nogen, der surfer med en AdBlock'er, som konsekvent blokerer jQuery. I dag ville det svare til at 'surfe' uden at være tilkoblet WWW *o)
Jeg tror kun der er nogle få der blokker jquery for at undgå reklamer. Man skal have lidt kodekendskab for at kunne gennemskue at det er et jquery script der laver anti-blocken.
Når man åbner listen over blokerbare elementer i sin ad-block vil alle js filer blive vist. Så det er ligegyldigt hvad man kalder filen.
Men ja, måske overkill at gøre som jeg. Men når man har mulighed for at benytte den bedste metode kan man lige så godt gøre det. Selvom det er meget få ekstra man får ram på :o)
Undskyld, men jeg forstår stadig ikke, hvad det er, du er bange for. Tror du på, der er nogen, som gider sidde og nærlæse dine scriptfiler for at finde din anti-ad-blocker?
Brug tiden på dit indhold, så du får vist nogle flere reklamer - i stedet for at spilde tiden på at forsøge at outsmarte tre bulgarske brugere, som alligevel ikke forstår indholdet af dine reklamer *o)
Jeg tror der gik sport i det både for mig og et par af mine brugere :o) Det handler ikke om at være bange for noget, det handler om at vinde.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.