Ошибки Javascript из Google Adsense

На нескольких моих сайтах, работающих с 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&h=250&slotname=9210181593&w=300&flash=10.0.42&url=http%3A%2F%2Fwww.anekdotz.com%2F&dt=1269901036429&correlator=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//www.anekdotz.com. Домены, протоколы и порты должны соответствовать.

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

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

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

Ответ 1

Google испортил свой script. Не так много вы можете с этим поделать.

По какой-то причине 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 забрасывает фактический whinge в консольный журнал об этом.

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

Ответ 2

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

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

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

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

Ответ 3

Это нормально, потому что ваш браузер предотвращает атаки 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/

Ответ 5

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

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

Ответ 6

Это похоже на сообщение об ошибке, маскирующее реальную причину. Реальная причина, вероятно, какая-то неправильная конфигурация Adsense; К сожалению, Adsense, похоже, недостаточно проверяет, чтобы дать более релевантное сообщение об ошибке.

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

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

Ответ 7

Просто возникла аналогичная проблема. Не уверен, что это связано, но я все равно объясню.

У меня было две объявления, которые показывались на моей странице и хотели "реорганизовать" код, только вызвав этот script один раз в конце страницы:

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

Мои объявления сломались, и я понял, что этот тег script должен быть размещен сразу после каждого объявления var 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 по-прежнему помещался в нижней части моей страницы и, таким образом, пытался загрузить еще один из моих script -tags в качестве объявления. Это не удалось, и я получил эту ошибку, которую вы видели.

Итак, убедитесь, что вы сохраняете теги объявлений script после eachother и не место, например:

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

Ответ 8

Просто перемещая <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script> вверху страницы над объявлениями, а не внизу, исправили это для меня

Ответ 9

На вкладке Сайты в панели управления Google Adsense (версия для Интернета или приложения). Убедитесь, что ваш сайт настроен с your-domain.com (или любым другим) и www.your-domain.com в качестве субдомена.