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)
źródło
Odpowiedzi:
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,
Pa
jest'postMessage'
!targetOrigin
Argumentem w tej rozmowythis.la
jest ustawionyhttp://googleads.g.doubleclick.net
. Jednak nowy element iframe został zapisany zsrc
ustawieniem naabout: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.źródło
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.
źródło
postMessage
mogą być wywoływane w dowolnym widoku bez konieczności uwzględniania ograniczeń tego samego pochodzenia.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ą. ”)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 nazwiecrossdomain.xml
w 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/
źródło
Plik crossdomain.xml w katalogu głównym witryny, umożliwiający dostęp do googleads.g.doubleclick.net, powinien rozwiązać ten problem.
Zobacz tę stronę, http://www.warriorforum.com/adsense-ppc-seo-discussion-forum/458906-adsense-blank-space-problem.html
źródło
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ął.
źródło
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.
źródło
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>
źródło
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źródło
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ą.
źródło