Błędy JavaScript z Google Adsense

79

W kilku moich witrynach z systemem AdSense otrzymuję następujące błędy:

Nie można wysłać wiadomości do [ http: //] googleads.g.doubleclick.net . Odbiorca ma pochodzenie http://www.anekdotz.com .

Niebezpieczna próba uzyskania dostępu do ramki z adresem URL [ http: //] www.anekdotz.com/ z ramki z adresem URL [ http: //] googleads.g.doubleclick.net/pagead/ads?client=ca-pub-9099580055602120&output= HTML i H = 250 nazwaboksu = 9210181593 i W = 300 i flesz = 10.0.42 & URL = http% 3A% 2F% 2Fwww.anekdotz.com% 2F i dt = 1269901036429 i korelator = 1269901036438 i frm = 0 i ga_vid = +711.000.587,1269901037 i ga_sid = 1269901037 i ga_hid = 654061172 i ga_fc = 0 i u_tz = -240 i u_his = 2 i u_java = 1 & u_h = 900 i u_w = 1440 & u_ah = 878 & u_aw = 1436 & u_cd = 24 & u_nplug = 10 & u_nmime = 101 & biw = 1365 & bih = 806 & eid = 44901212 & fu = 0 & ifi = 1 & dtd = 153 & xpc = Xkfk1oufPQ & p = httpdotz.com // www.anekotz.com . Domeny, protokoły i porty muszą być zgodne.

(z konsoli javascript Chrome)

Wydaje się, że reklamy wyświetlają się prawidłowo i nie ma to wpływu na mój natywny kod JavaScript. Jednak czasami wydaje się, że te błędy spowalniają ładowanie strony. Jak mogę rozwiązać ten problem?

(Zmodyfikowałem adresy URL, aby umożliwić mi opublikowanie tego, ponieważ jestem nowym użytkownikiem)

Arjun
źródło
Czy anekdotz.com to Twoja witryna internetowa?
Pekka
1
Mam ten sam problem. Ten post pochodzi sprzed prawie roku! Jeśli jest to problem z Google, jak to się dzieje, że nie został naprawiony !? Zabija także inne pliki js w witrynie. W związku z tym wydaje się, że dotyczy tylko reklam w tabelach wyników .. google.com/support/forum/p/AdSense/…
UpTheCreek
Prześlij problem do Google Adsense ....
Incognito
@ user257493 - jest wiele przykładów osób z tym samym problemem na stronach grup AdSense / pomocy technicznej i nie widziałem nikogo z poprawką. W końcu przedstawię sprawę, ale wiem, że zajmie to trochę czasu.
UpTheCreek
3
to samo z elementami iframe w Mapach Google, tak, Google może łamać zasady. mam nadzieję, że to nie zrujnuje rankingu ;-)
Jacob Lowe

Odpowiedzi:

81

Google zepsuło ich skrypt. Niewiele możesz z tym zrobić.

Z jakiegoś powodu http://pagead2.googlesyndication.net/pagead/expansion_embed.js, zawarty na stronie nadrzędnej przez skrypty AdSense, próbuje wysłać informacje o ogłoszeniu do nowo napisanego <iframe>utworzonego do przechowywania ogłoszenia, używając nowej funkcji postMessage HTML5 :

            ha(this, function (f, e) {
                d[Pa](this.a[A]+"|"+f+":"+e, this.la)
            });

Tak. Jest tam niezły zminimalizowany / zaciemniony kod. Zaufaj mi, Pajest 'postMessage'!

targetOriginArgumentem w tej rozmowy this.lajest ustawiony http://googleads.g.doubleclick.net. Jednak nowy element iframe został zapisany z srcustawieniem na about:blank. To nie jest zgodne z docelowym źródłem, więc przeglądarka musi odmówić wysłania wiadomości. Wydaje się jednak, że tylko Chrome rzuca rzeczywisty buczenie do dziennika konsoli na ten temat.

Nie mam pojęcia, dlaczego w ogóle to robi, nieważne, dlaczego nie używa '*' jako miejsca docelowego ... Tak naprawdę nie mam ochoty brodzić w zaciemnionym skrypcie, aby się dowiedzieć. Jednak ten błąd nie powinien powodować spowolnienia ładowania strony. Jeśli widzisz przerwy, zwykle jest to rozwiązywanie i pobieranie innych zewnętrznych skryptów.

bobince
źródło
Hej, dzięki za ostrzeżenia. Tak, nie jestem pewien, czy to faktycznie spowalnia stronę, ale wyświetla powiadomienie przeglądarki „ładowanie strony” na dole, gdy strona wygląda na załadowaną. Jest to denerwujące i może również przeszkadzać niektórym użytkownikom, którzy uważają, że powinni poczekać, aż ich przeglądarka się wyłączy. Mam nadzieję, że wkrótce coś z tym zrobią.
Arjun
4
Mam również ten błąd, niezbyt powolny, ale zdaję sobie sprawę, że powoduje to, że inny JS przestaje działać, jak integracja z aplikacjami społecznościowymi fb. Zastanawiam się, jak to się dzieje, że nie zostało to już naprawione.
Mescalito
Mogę dodać: zdarza mi się to tylko podczas określonej sesji Chrome, w której mam zainstalowany program blokujący reklamy. Wyłączyłem wtyczkę dla określonych adresów URL, nadal pojawia się komunikat o błędzie pochodzenia. Jeśli otworzysz tę samą witrynę w oknie incognito, problem znika.
Andres SK,
Czy ta odpowiedź jest nadal aktualna w 2018 roku?
InTheNameOfScience
15

Google próbuje wykorzystać dziwactwo przeglądarki, w wyniku którego niektóre przeglądarki ignorują zasady tego samego pochodzenia dla okien z about: blank jako adresem URL, pozwalając temu oknu na wysyłanie żądań XMLHttpRequest lub, w tym przypadku, postMessage do dowolnej witryny.

O ile mi wiadomo, przeglądarki ostatnio wyłączały to zachowanie. Musisz mieć jedną taką załataną przeglądarkę.

Miejmy nadzieję, że ta zepsuta funkcjonalność nie wpływa na Twoje możliwości zarabiania na reklamach.

To denerwujące dla Twojej witryny, aby generować błędy Javascript bez Twojej winy, ale jest to możliwość, którą musisz zaakceptować, gdy uruchamiasz na swojej stronie czyjś kod JavaScript.

thomasrutter
źródło
„zezwolenie temu oknu na przesłanie ... postMessage żądań do dowolnej witryny” Jak to jest exploit? postMessagemogą być wywoływane w dowolnym widoku bez konieczności uwzględniania ograniczeń tego samego pochodzenia.
Eli Gray,
1
Można to tak nazwać , oczywiście. Ale to, czy sama wiadomość zostanie wysłana, zależy od tego, czy okno docelowe w momencie odebrania wiadomości ma pochodzenie opisane przez drugi argument do postMessage. Wydaje się, że tak nie jest w tym przypadku. (Jeśli chodzi o powód, dla którego mógł to być exploit, cytuję z MDC: „Gdyby do przesłania hasła użyto postMessage, byłoby absolutnie krytyczne, aby ten argument był identyfikatorem URI, którego pochodzenie jest takie samo, jak zamierzony odbiorca wiadomości zawierającej hasło , aby zapobiec przechwyceniu hasła przez złośliwą osobę trzecią. ”)
Jeff Walden,
7

To normalne, ponieważ Twoja przeglądarka zapobiega atakom CSRF z innych witryn.

Aby umożliwić googleads...dostęp do Twojej witryny i rozwiązać ten problem, utwórz plik o nazwie crossdomain.xmlw swoim katalogu głównym i wypełnij go następującą zawartością:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy 
  SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="googleads.g.doubleclick.net" />
</cross-domain-policy>

Aby to przetestować, przejdź do swojej domeny http://twoja-domena.com/crossdomain.xml i upewnij się, że na tej stronie nie ma błędów. Pozwoliłeś również używać symboli wieloznacznych itp. (Spójrz na referencje). Kiedy skończysz, odśwież stronę. Mam nadzieję, że to pomoże.

Przykład na żywo: http://www.blanjamudah.com/crossdomain.xml

Źródła: http://en.wikipedia.org/wiki/Cross-site_request_forgery http://curtismorley.com/2007/09/01/flash-flex-tutorial-how-to-create-a-crossdomainxml-file/

risnandar
źródło
1
To nie zadziałało dla mnie, może mieć znaczenie dla Flash Playera.
fmalina
4

Dla tych, którzy trafią na tę stronę po wyszukaniu domeny i kodu błędu protokołu:

AdSense wypuściło nową asynchroniczną wersję swojego javascript, która rozwiązała problem błędów międzydomenowych generowanych, gdy używaliśmy ich starszego kodu osadzania. Kiedy użyliśmy ich standardowego kodu osadzania w naszej witrynie z dużą ilością technologii AJAX, wystąpił błąd między domenami. Gdy zaimplementowaliśmy ich kod asynchroniczny, w połączeniu z odpowiednio zdefiniowanym plikiem crossdomain.xml, błąd między domenami zniknął.

jfrprr
źródło
1

Wydaje się, że jest to przypadek komunikatu o błędzie maskującego prawdziwą przyczynę. Prawdziwą przyczyną jest prawdopodobnie jakiś rodzaj błędnej konfiguracji Adsense; niestety wydaje się, że Adsense nie przeprowadza wystarczających kontroli, aby podać bardziej trafny komunikat o błędzie.

Sam miałem ten błąd i doszedłem do tego wniosku po przeszukaniu forów, gdzie niektórzy ludzie zgłosili, że został naprawiony po zweryfikowaniu ich konta bankowego lub czegokolwiek. W moim przypadku środowisko po stronie serwera miesza się z parametrem google_ad_client, więc prawdziwym problemem było to, że parametr był zerowy. Gdy to naprawiłem, wyświetlały się reklamy i nie było więcej komunikatów o błędach.

W praktyce nie ma to nic wspólnego z polityką tego samego pochodzenia. Teraz, gdy kod AdSense jest poprawny, mogę nawet wyświetlać reklamy podczas pracy na hoście lokalnym, a także na serwerze.

mahemoff
źródło
1

Właśnie mam podobny problem. Nie jestem pewien, czy to jest powiązane, ale i tak wyjaśnię.

Na mojej stronie wyświetlały się dwie reklamy i chciałem „refaktoryzować” kod, wywołując ten skrypt tylko raz na końcu strony:

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

Moje reklamy się zepsuły i doszedłem do wniosku, że ten tag script należy umieścić tuż po każdym skrypcie ads var:

<script type="text/javascript"><!--
google_ad_client = "ca-pub-872346872364872364";
google_ad_slot = "719238712983";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>

Ale kiedy cofnąłem swoje zmiany, pierwszy tag skryptu nadal był również umieszczony na dole mojej strony, a tym samym próbował załadować kolejny z moich tagów skryptu jako reklamę. Nie udało się i pojawił się ten błąd, który widziałeś.

Dlatego upewnij się, że dwa tagi skryptu reklam są zachowywane po sobie i nie ma ich w innym miejscu, np .:

<script type="text/javascript"><!--
google_ad_client = "ca-pub-872346872364872364";
google_ad_slot = "719238712983";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
Piotr
źródło
1

Po prostu przejście <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>na górę strony nad reklamami, a nie poniżej, rozwiązało ten problem

Vinnie James
źródło
0

Na karcie Witryny na pulpicie nawigacyjnym Google Adsense (wersja internetowa lub aplikacji). Upewnij się, że Twoja witryna jest skonfigurowana z domeną twoja-domena.com (lub jakimkolwiek tld), a domeną www.twoja-domena.com jako subdomeną.

JayChase
źródło