Ha a webpillango linkre kattintasz, akkor az megnyilik egy uj ablaoban es eltunik a link, megjelenik egy szoveg: tartalom.
El nem tüntethető reklám
Írta: Tupacko | 2010. április 07. | kategóriák: CSS, JavaScript, Speciális, WebKérésre érkezett ez a leírás, amiben bemutatok egy egyszerű trükköt, hogyan készíthetsz olyan popup (felugró) vagy overlay (eltakaró) reklámot, ami egészen addig nem tűnik el, amíg egy reklámra rá nem kattint az olvasó. Tudom, hogy nem szép dolog, de legyünk naívak és gondoljunk arra, hogy ennek akár jószándékú felhasználásai is lesznek.
Induljunk ki abból, hogy senki sem szereti, ha a már meglévő weboldalukat át kell írni egy kis ráncfelvarrásért. Fogjuk a már meglévő weboldalunk és írjuk be a body végére a reklámot tartó divet.
1 2 3 4 5 6 | <body>
<p>Tartalom</p>
<div id="popupNoHideUntilClick" class="popupNoHideUntilClickClass">
<a class="adLink" href="http://webpillango.org/" title="WebPillango">WebPillango</a>
</div>
</body> |
Ha ezzel megvagyunk, adjuk hozza a megfelelő CSSt, hogy a reklámunk eltakarja a valós tartalmat, illetve hogy a reklámot egy osztálycserével eltudjuk tüntetni (régi IE-k nem szeretik, ha a style elemüket babrálják, annál inkább, ha kicserélik a className változót, de majd hamarosan meglátod, miről is van szó).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | .popupNoHideUntilClickClass { width:100%; height:100%; position: absolute; top: 0px; left: 0px; background: #fff; } .hiddenElement { display: none; visibility: hidden; overflow: hidden; width: 0; height: 0; } |
Miután sikeresen beillsztettük a CSS részt is, mindössze be kell másolnunk a JavaScript-et és máris működik a dolog!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | function addLoadEvent(func) { var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = func; } else { window.onload = function() { if (oldonload) { oldonload(); } func(); } } } function hidePopup() { document.getElementById('popupNoHideUntilClick').className = "hiddenElement"; } function initPopupNoHideUntilClick() { var links = document.getElementById('popupNoHideUntilClick').getElementsByTagName('a'); for(var i=0; i < links.length; i++){ if (links[i].className.indexOf('adLink') != -1) { links[i].target = "_blank"; links[i].onclick = hidePopup; } } } addLoadEvent(initPopupNoHideUntilClick); |
Természetesen az onLoad eseményre másként is ráköthetjük a reklámunkat kezelő függvényt, de próbáltam úgy elérni a kívánt eredményt, hogy a már meglévő onLoad események ne vesszenek el. Az addLoadEvent függvényt Simon írta. A működési elve egyszerű: megnézed, ha már van onLoad esemény. Ha még nincs ilyen esemény, akkor a kért függvényt csatolod rá. Ellenkező esetben készítesz egy új függvényt, ami meghívja az eddigi onLoad esemény függvényét, majd az újonnan rátett onLoad eseményt. Ezt az összetett függvényt pedig rácsatolod az onLoad eseményre.
A példa oldalt itt találod!
az addeventhandlerrel mi volt a baj?
Ertem en, hogy legyunk regi kompatibilisek, nade vazz, 2010 van.
(IE-ben mashogy hivjak, de ugyanugy tobb esemenyt lehet kezelni.)
Szerintem jó, bár attól függ mire akarjuk használni. Pl. Google Adsensére semmiféle képen se, mert lesz vagy napi 1000 kattintás és kitesz a Google mindenestül. De arra, hogy egyik másik weboldalunkra ilyen módon vigyünk látogatást, arra szerintem tökéletes, bár én még raknák hozzá egy sütit, hogy a szerencsétlen látogatónak, minden frissítés után, ne kelljen a linkre kattintania. Mikor a szavazás volt akkor is nekem mindig megjelent az ablak hogy szavazz, őszintén szólva a végére, már kezdet bosszantani, hisz, direkt szavazni jöttem, mindig.
Érdekes vívmány ez az el nem tüntethető reklám. Valóban sokszor kissé szemét dolog, de azért ilyen is kell… vagy mégsem?
Véleményem szerint az ilyen reklámozási forma egy idő után drasztikus látogatóesést fog eredményezni. Legyen akár jó indulatú reklám vagy rossz.
Felhozom a Firebug-ot, majd katt az ad containerre, a stílus panelen beállítom a display: none-t, azt csókolom.





Nálam nem történik semmi a példa oldalon. Mit kellene látnom?