Avatar billede boxer Nybegynder
27. august 2012 - 09:10 Der 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

Hvordan gør jeg det?
Avatar billede Panen Nybegynder
27. august 2012 - 09:49 #1
Med jQuery eller et andet eksternt script kan du istedet for at ramme IDs, med din funktion ramme alle elementer med samme ClassName.

Jeg kan lave et hurtigt eksempel hvis du er interesseret i at bruge jQuery?
Avatar billede boxer Nybegynder
27. august 2012 - 09:59 #2
Jquery er allerede i brug. Så det vil være fint.
Avatar billede Panen Nybegynder
27. august 2012 - 10:12 #3
$(".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.
Avatar billede Panen Nybegynder
27. august 2012 - 10:14 #4
$(".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.
Avatar billede boxer Nybegynder
27. august 2012 - 10:39 #5
Den virker ikke.
Jeg har brugt den samme class alle steder.
Avatar billede jokkejensen Novice
27. august 2012 - 11:43 #6
Hvis .ads er gemt, er det nok ikke skide hensigsmæssigt at underrette brugeren der.

/J
Avatar billede Panen Nybegynder
27. august 2012 - 12:42 #7
Det kan der være noget om ^^ Jeg tog dog bare udgangspunkt i trådstarters kode, uden lige at tænke funktionaliteten igennem.
Avatar billede olebole Juniormester
27. august 2012 - 15:24 #8
<ole>

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

/mvh
</bole>
Avatar billede boxer Nybegynder
27. august 2012 - 15:30 #9
Ole,

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";
    }
    }

    onload_functions.push('gandalf()');
Avatar billede Panen Nybegynder
27. august 2012 - 15:36 #10
#9 Hvem blokerer jQuery uden at blokere javascript? :b
Avatar billede olebole Juniormester
27. august 2012 - 15:57 #11
"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)
Avatar billede jokkejensen Novice
28. august 2012 - 11:59 #12
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.

Vh
/J
Avatar billede olebole Juniormester
28. august 2012 - 15:02 #13
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)
Avatar billede jokkejensen Novice
29. august 2012 - 19:08 #14
http://jsfiddle.net/HMKPK/

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.

/J
Avatar billede olebole Juniormester
29. august 2012 - 20:18 #15
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  =)
Avatar billede boxer Nybegynder
30. august 2012 - 07:40 #16
#10
Jquery includeres som en fil.
Filer kan blokeres og selv jquery bliver blokeret i kampen mod reklamerne.

Hvis man i stedet bruger en stump javascript, kan det kun omgås ved at deaktivere javascript i browseren.
Det kan man så straffe med noscript.

Men da du rent faktisk besvarede mit spørgsmål, må du gerne smide et svar for point.
Avatar billede Panen Nybegynder
30. august 2012 - 08:54 #17
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
Avatar billede olebole Juniormester
30. august 2012 - 16:04 #18
#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  =)
Avatar billede boxer Nybegynder
30. august 2012 - 16:37 #19
Frygt og frygt :o)
Nej, og jeg bruger da også jquery samt andre js filer.
Bare ikke i forbindelse med anti ad-block systemet.
Avatar billede olebole Juniormester
30. august 2012 - 17:05 #20
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)
Avatar billede boxer Nybegynder
30. august 2012 - 17:14 #21
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)
Avatar billede olebole Juniormester
30. august 2012 - 17:30 #22
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)
Avatar billede boxer Nybegynder
30. august 2012 - 20:30 #23
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester