Ошибки Javascript от Google Adsense - PullRequest
79 голосов
/ 30 марта 2010

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

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

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

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

Ответы [ 9 ]

79 голосов
/ 30 марта 2010

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

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

14 голосов
/ 20 апреля 2010

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

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

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

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

7 голосов
/ 17 августа 2013

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

4 голосов
/ 09 октября 2013

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

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

4 голосов
/ 22 октября 2012

Файл crossdomain.xml в корне сайта, разрешающий доступ к googleads.g.doubleclick.net, должен исправить это.

Смотрите эту страницу, http://www.warriorforum.com/adsense-ppc-seo-discussion-forum/458906-adsense-blank-space-problem.html

1 голос
/ 03 сентября 2016

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

1 голос
/ 16 февраля 2013

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

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

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

Моя реклама сломалась, и я понял, что этот тег сценария должен быть размещен сразу после каждого сценария объявлений 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 голос
/ 18 августа 2011

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

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

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

0 голосов
/ 15 июня 2019

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

...