Помилки Javascript від Google Adsense


79

На кількох моїх сайтах, що працюють в AdSense, я отримую такі помилки:

Не вдається опублікувати повідомлення на [ http: //] googleads.g.doubleclick.net . Одержувач має походження http://www.anekdotz.com .

Небезпечна спроба JavaScript отримати доступ до кадру з URL-адресою [ http: //] www.anekdotz.com/ із кадру з URL-адресою [ http: //] googleads.g.doubleclick.net/pagead/ads?client=ca-pub-9099580055602120&output= HTML & ч = 250 & slotname = 9210181593 & W = 300 & флеш = 10.0.42 & URL = HTTP% 3A% 2F% 2Fwww.anekdotz.com% 2F & дт = 1269901036429 & коррелятор = 1269901036438 & FRM = 0 & ga_vid = +711000587,1269901037 & ga_sid = 1269901037 & ga_hid = 654061172 & ga_fc = 0 & u_tz = -240 & u_his = 2 & u_java = 1 & u_h = 900 & 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 = http% 3A // . Домени, протоколи та порти повинні збігатися.

(із консолі javascript Chrome)

Здається, оголошення відображаються належним чином, і це не впливає на мій власний код JavaScript. Однак іноді ці помилки уповільнюють завантаження сторінки. Як я можу вирішити цю проблему?

(Я змінив URL-адреси, щоб дозволити мені розмістити це, оскільки я новий користувач)


Чи є anekdotz.com вашим веб-сайтом?
Pekka

1
Тут та сама проблема. Ця публікація майже рік тому! Якщо проблема в google, то як це не виправлено !? Це також вбиває інших js на сайті. Згідно з цим, здається, це пов’язано лише з оголошеннями таблиць лідерів .. google.com/support/forum/p/AdSense/…
UpTheCreek

Надішліть проблему на google adsense ....
Incognito

@ user257493 - на сторінках груп AdSense / підтримки є багато прикладів людей з однаковою проблемою, і я не бачив нікого з виправленням. Зрештою подасть випуск, але я знаю, що для цього потрібен вік.
UpTheCreek

3
те саме з iframes карт Google, так, Google може порушувати правила. сподіваюся, це не зіпсує рейтинг SEO ;-)
Джейкоб Лоу

Відповіді:


81

Google зіпсував їх сценарій. З цим мало що можна зробити.

З якоїсь причини http://pagead2.googlesyndication.net/pagead/expansion_embed.js, включена на батьківську сторінку сценаріями AdSense, намагається надіслати інформацію про рекламу до нещодавно написаної, <iframe>створеної для розміщення реклами, за допомогою нового засобу HTML5 postMessage :

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

Так. Якийсь там приємний мініфікований / затуманений код. Повірте мені, Paє 'postMessage'!

targetOriginАргумент у цьому виклику, this.laвстановлюється в http://googleads.g.doubleclick.net. Однак новий iframe був написаний із srcнабором about:blank. Це не збігається з цільовим джерелом, тому браузер повинен відмовити в надсиланні повідомлення. Здається, лише Chrome видає про це справжній сигнал у журналі консолі.

Не знаю, для чого це взагалі '*'робиться , неважливо, чому це не просто використання як цільове джерело ... Мені насправді не хочеться проникати в заплутаний сценарій, щоб дізнатись. Однак ця помилка не повинна спричинити уповільнення завантаження сторінки. Якщо ви бачите паузи, зазвичай це вирішення та отримання інших зовнішніх сценаріїв.


Привіт, дякую за голови. Так, я не впевнений, чи це насправді сповільнює роботу сторінки, але це викликає сповіщення браузера про "завантаження сторінки" внизу, поки сторінка здається завантаженою. Це дратує і може також заважати деяким користувачам, які вважають, що їм слід почекати, поки їх браузер вимкнеться. Сподіваюсь, вони скоро щось з цим зроблять.
Арджун

4
У мене також є ця помилка, не особливо повільність, але я усвідомлюю, що це змушує інші JS припинити працювати, наприклад інтеграція соціальних програм fb. Цікаво, як же це ще не виправлено.
Mescalito

Можу додати: це трапляється зі мною лише під час певного сеансу Chrome, де встановлено блокувальник реклами. Я вимкнув плагін для певних URL-адрес, усе ще спрацьовує повідомлення про помилку походження. Якщо відкрити той самий сайт у вікні анонімного перегляду, проблема усувається.
Андрес СК

Чи відповідає ця відповідь ще у 2018 році?
InTheNameOfScience

15

Google намагається використати химерність браузера, внаслідок чого деякі браузери ігнорують політику того самого походження для вікон із URL-адресою about: blank, що дозволяє цьому вікну подавати XMLHttpRequest або, у цьому випадку, запити postMessage на будь-який сайт.

Наскільки мені відомо, нещодавно браузери відключали таку поведінку. У вас повинен бути один такий виправлений браузер.

Сподіваємось, ця непрацездатна функціональність не впливає на вашу можливість заробляти гроші на рекламі.

Вашому сайту дратує генерувати помилки Javascript не з власної вини, але це можливість, яку ви повинні прийняти, коли запускаєте чужий Javascript на своїй сторінці.


"дозволяючи цьому вікну подавати ... запити postMessage на будь-який сайт" Як це експлойт? postMessageможуть бути викликані в будь-якому режимі перегляду, не враховуючи обмеження того самого походження.
Елі Грей

1
Звичайно, це можна так назвати . Але те, чи надсилається саме повідомлення, залежить від того, чи має цільове вікно під час отримання повідомлення джерело, описане другим аргументом postMessage. Здається, тут справа не в цьому. (Що стосується того, чому це може бути експлойтом, цитуючи MDC: "Якби postMessage використовувався для передачі пароля, було б абсолютно критично, щоб цей аргумент був URI, походження якого збігається з передбачуваним одержувачем повідомлення, що містить пароль , щоб запобігти перехопленню пароля зловмисною третьою стороною. ")
Джефф Уолден

7

Це нормально, оскільки ваш браузер запобігає атакам CSRF з інших веб-сайтів.

Щоб дозволити googleads...доступ до вашого веб-сайту та вирішити цю проблему, створіть файл із іменем crossdomain.xmlу вашому веб-корінці та заповніть його таким вмістом:

<?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>

Щоб перевірити це, перейдіть до свого домену http://your-domain.com/crossdomain.xml і переконайтесь, що на цій сторінці немає помилок. Ви також дозволили використовувати символи підстановки тощо (дивіться посилання). Закінчивши, оновіть сторінку. Сподіваюся, що це допомагає.

Приклад у реальному часі: http://www.blanjamudah.com/crossdomain.xml

Посилання: http://en.wikipedia.org/wiki/Cross-site_request_forgery http://curtismorley.com/2007/09/01/flash-flex-tutorial-how-to-create-a-crossdomainxml-file/


1
Це не спрацювало для мене, можливо, це актуально для Flash Player.
fmalina


4

Для тих, хто потрапляє на цю сторінку після пошуку домену та коду помилки протоколу:

AdSense випустила нову асинхронну версію свого javascript, яка розглядала міждоменні помилки, що виникали, коли ми використовували їхній старіший код вбудовування. Коли ми використали їхній стандартний код для вбудовування на нашому веб-сайті, важкому для AJAX, ми отримали міждоменну помилку. Коли ми застосували їх асинхронний код і в поєднанні з правильно визначеним crossdomain.xml, помилка між доменами зникла.


1

Здається, це випадок повідомлення про помилку, яке маскує справжню причину. Справжньою причиною є, мабуть, якась неправильна конфігурація Adsense; на жаль, Adsense, здається, не робить достатньо перевірок, щоб надати більш відповідне повідомлення про помилку.

Я сам мав цю помилку і прийшов до такого висновку після дослідження форумів, де деякі люди повідомили, що це було виправлено після підтвердження їх банківського рахунку чи чогось іншого. У моєму випадку моє середовище на стороні сервера псувало параметр google_ad_client, тому справжньою проблемою було те, що параметр був нульовим. Після того, як я це виправив, оголошення відображались, і більше повідомлень про помилки не було.

Тож на практиці це насправді нічого спільного з політикою того самого походження. Тепер, коли код AdSense правильний, я навіть зараз можу показувати рекламу під час запуску на localhost, а також на сервері.


1

Щойно отримав подібну проблему. Не впевнений, що це пов’язано, але я все одно поясню.

У мене було два оголошення, які відображалися на моїй сторінці, і я хотів "рефакторити" код, запустивши цей сценарій лише один раз в кінці сторінки:

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

Мої оголошення зламалися, і я зрозумів, що цей тег скрипта повинен бути розміщений відразу після кожного варіанта сценарію оголошень:

<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"><!--
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>

1

Просто перехід <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>до верхньої частини сторінки над оголошеннями, а не нижче, це виправило для мене


0

На вкладці Сайти на інформаційній панелі Google Adsense (версія Інтернету чи програми). Переконайтеся, що ваш веб-сайт налаштовано на ваш домен.com (або будь-який інший tld) як домен та www.your-domain.com як субдомен.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.