[JavaScript]Sprawdzanie czy istnieją globalne zmienne

0

Witam.
Mam kod

http://pagead2.googlesyndication.com/pagead/show_ads.js

I mam problem. Jest tam jakaś zmienna "globalna"?
Powiem lepiej co chce zrobić.

To jest kod od reklam google. Popularna stała się wtycznka adblock (sam ją używam), ktora blokuje reklamy.
To więc na stronie jest odnośnik do tego skryptu.

<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

Gdyby była jakaś globalna zmienna w tym kodzie, np ZmiennaOdGoogle = 12312;
to bym ją mógł ją porównać i po porównaniu wywnioskować czy ktoś blokuje ten skrypt

if (ZmiennaOdGoogle <> 12312)
alert("wyłącz adblock!")
0

Globalne zmienne zapisywane są w równie globalnym obiekcie window, jako elementy tego obiektu.

Czyli w Twoim przykładzie byłoby tak:

if (window['ZmiennaOdGoogle'] != 12312)
    alert("wyłącz adblock!")
0

Czyli w Twoim przykładzie byłoby tak:
if (window['ZmiennaOdGoogle'] != 12312)
alert("wyłącz adblock!")

Co to mi zmienia? Wiem żę są 2 sposoby na porównanie!

0

zdaje się że ten skrypt generuje jakiś div czy coś, więc wystarczy sprawdzić czy on istnieje - firebug pomoże

0

madmike: to już wczesniej testowałem, lecz nic nie pomaga. To tylko wyświetla monit, gdzie jest link, ktory umieszcza u nas cookie, i monit znika.

gfhgfh: ymm czy ja wiem. Firebug wskazuje na ramke, lecz jak złapać jej uchwyt. Szukałem po wartosci name, lecz nic nie umie znaleźć javascript :<undefined :D

0

to nie szukaj po name, tylko po id (document.getElementById), i poczekaj aż załaduje się i wykona skrypt google'a (kilka razy setTimeout?).

[dopisane]
po sprawdzeniu: document.getElementsByTagName('iframe'), pętla po uzyskanej tablicy aż uzyskasz iframe, którego wysokość to 251, a szerokość 120, albo jeśli nie używasz żadnych iframe'ów na stronie i wiesz, że używać nie będziesz, to po prostu document.getElementsByTagName('iframe')[0]

0

Racja. Dzieki opóźnieniu da się znaleźć ramke (nie po nazwie, lecz po sprawdzeniu wszystkich). Dzięki ŁF

function CheckAD(){
var i = 1 , check = true, d = document.getElementsByTagName('iframe');
while(d.length){
if(d[i++].name == "google_ads_frame")
check = false;
}
if(check)
alert("Wylacz adblock!");
}
setTimeout("CheckAD();", 2000);

Lecz mam 1 pytanie:
czemu firebug się pluję o ten kawałek kodu?

d[i++] is undefined
[Break on this error] if(d[i++].name == "google_ads_frame")

??

0

Kod chyba powinien wyglądać tak:

function CheckAD(){
var i = 0, check = true, d = document.getElementsByTagName('iframe');

for(i = 0; i < d.length; i++) {
  if (d[i].name == "google_ads_frame") check = false;
}

if(check)
  alert("Wylacz adblock!");
}
setTimeout("CheckAD();", 2000);

Kod nie działał, bo:

  1. zaczynałeś iterację od 1
  2. pętla mogła być nieskończona

Co do tego błędu. Załóżmy, że w d jest tylko jeden element iframe. Czyli d.length będzie wynosiło 1.
while(d.length) stanie się pętlą nieskończoną.
W tej pętli d[i++] odpowiada d[1], a drugiego elementu w tej tablicy przecież już nie ma. Zmienna ta będzie nie obiektem, ale undefined, więc wypluje pokazany błąd.

0

Tzn. Mam i = 0 . Zapomniałem zmienić na forum (stara kopia w schowku), bo wczesniej testowałem ze moze o to sie pluje jakimś cudem :D

Dzięki za odpowiedź

[dopisane]
gdfgdfh: tak.... , ale teraz tłumacze, iż wcześniej zacząłem iterację od 0 :D

0

no ale niby czemu length miałby kiedyś być 0 ? ;| powyżej masz poprawną wersję
poza tym kod wcześniej pod linkiem podany jest dobry, wyświetlenie diva z informacją i ustawienie cookie to tylko przykład :|

0

no ale niby czemu length miałby kiedyś być 0 ?
Będzie tak, jeśli nie znajdzie żadnych elementów iframe na stronie.

0
guest123 napisał(a)

no ale niby czemu length miałby kiedyś być 0 ?
Będzie tak, jeśli nie znajdzie żadnych elementów iframe na stronie.

while(d.length){
  robcos
}

przyleci wróżka i podczas pętli nagle pokryje wszystkie iframy magicznym pyłem żeby ich nie można było znaleźć ?

0
kodżak napisał(a)
guest123 napisał(a)

no ale niby czemu length miałby kiedyś być 0 ?
Będzie tak, jeśli nie znajdzie żadnych elementów iframe na stronie.

while(d.length){
  robcos
}

przyleci wróżka i podczas pętli nagle pokryje wszystkie iframy magicznym pyłem żeby ich nie można było znaleźć ?

Poczytaj dokładnie http://4programmers.net/Forum/496635#id496635

0
bordeux napisał(a)

Poczytaj dokładnie http://4programmers.net/Forum/496635#id496635

while(d.length) - przecież to pętla nieskończona, wystarczy jeden iframe; uważniejsze czytanie kodu powoduje tylko wyraźniejszą nieskończoną pętlę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1