Ошибки 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 . Домены, протоколы и порты должны совпадать.

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

Кажется, что реклама отображается правильно, и это не влияет на мой собственный код javascript. Однако иногда кажется, что эти ошибки замедляют загрузку страницы. Как я могу исправить эту проблему?

(Я изменил URL-адреса, чтобы я мог опубликовать это, поскольку я новый пользователь)

Арджун
источник
Является ли anekdotz.com вашим веб-сайтом?
Pekka
1
Здесь та же проблема. Это сообщение написано почти год назад! Если это проблема Google, то почему она не исправлена ​​!? Это также убивает другие js на сайте. В соответствии с этим, кажется, связано с таблицы лидеров реклама только .. google.com/support/forum/p/AdSense/...
UpTheCreek
Отправьте проблему в Google AdSense ....
Incognito,
@ user257493 - есть много примеров людей с той же проблемой на страницах групп / поддержки AdSense, и я не видел никого с исправлением. В конце концов отправлю вопрос, но я знаю, что это займет возраст.
UpTheCreek
3
То же самое с фреймами Google Maps, да, 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, похоже, бросает реальную жалобу в журнал консоли по этому поводу.

Понятия не имею, почему он вообще это делает, не говоря уже о том, почему он не используется просто '*'в качестве целевого источника ... На самом деле мне не хочется лезть в обфусцированный скрипт, чтобы выяснить это. Однако эта ошибка не должна вызывать замедление загрузки страницы. Если вы видите паузы, он обычно разрешает и загружает другие внешние скрипты.

бобинс
источник
Привет, спасибо за внимание. Да, я не уверен, действительно ли это замедляет работу страницы, но в нижней части страницы появляется уведомление о «загрузке страницы», когда страница кажется загруженной. Это раздражает и может также беспокоить некоторых пользователей, которые думают, что им следует подождать, пока их браузер не закроется. Я надеюсь, что они скоро что-то с этим сделают.
Arjun
4
У меня также возникает эта ошибка, не особенно медленная, но я понимаю, что из-за нее перестают работать другие JS, например интеграция социальных приложений fb. Интересно, почему это до сих пор не исправили.
Мескалито
Могу я добавить: это происходит со мной только в конкретном сеансе Chrome, где у меня установлен блокировщик рекламы. Я отключил плагин для определенных URL-адресов, но все равно появляется сообщение об ошибке происхождения. Если открыть тот же сайт в окне инкогнито, проблема исчезнет.
Andres SK
Этот ответ все еще актуален в 2018 году?
InTheNameOfScience 09
15

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

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

Надеюсь, эта неработающая функция не повлияет на вашу способность зарабатывать деньги на рекламе.

На вашем сайте раздражает генерирование ошибок Javascript не по вашей вине, но вы должны согласиться с этой возможностью, когда запускаете на своей странице чужой Javascript.

Thomasrutter
источник
"разрешая этому окну отправлять ... запросы 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/

Risnandar
источник
1
У меня это не сработало, может быть актуально для Flash Player.
fmalina
4

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

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

jfrprr
источник
1

Кажется, это случай сообщения об ошибке, скрывающего настоящую причину. Настоящая причина, вероятно, в неправильной конфигурации AdSense; к сожалению, кажется, что AdSense не выполняет достаточных проверок, чтобы выдать более релевантное сообщение об ошибке.

У меня была эта ошибка, и я пришел к такому выводу после исследования форумов, где некоторые люди сообщали, что она была исправлена ​​после проверки их банковского счета или чего-то еще. В моем случае моя серверная среда возилась с параметром google_ad_client, поэтому настоящая проблема заключалась в том, что этот параметр был нулевым. Как только я исправил это, реклама показывалась и больше никаких сообщений об ошибке.

Так что на практике это не имеет ничего общего с политикой одинакового происхождения. Теперь, когда код AdSense верен, я могу показывать рекламу как на локальном хосте, так и на сервере.

Mahemoff
источник
1

У меня похожая проблема. Не уверен, связано ли это, но все равно объясню.

На моей странице показывались две рекламы, и я хотел «реорганизовать» код, вызывая этот скрипт только один раз в конце страницы:

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

Моя реклама сломалась, и я понял, что этот тег скрипта нужно размещать сразу после каждого скрипта 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>

Но когда я отменил свои изменения, первый тег сценария все еще был помещен внизу моей страницы и, таким образом, пытался загрузить еще один из моих тегов сценария в качестве рекламы. Это не удалось, и я получил эту ошибку, которую вы видели.

Поэтому убедитесь, что вы сохранили два тега рекламного скрипта друг за другом и ни в каком другом месте, например:

<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 (веб-версия или версия приложения). Убедитесь, что ваш сайт настроен с vash-domen.com (или любым другим tld) в качестве домена и www.your-domain.com в качестве поддомена.

JayChase
источник