En varios de mis sitios que ejecutan adsense, he recibido los siguientes errores:
No se puede publicar el mensaje en [ http: //] googleads.g.doubleclick.net . El destinatario tiene origen http://www.anekdotz.com .
Intento de JavaScript no seguro para acceder al marco con la URL [ http: //] www.anekdotz.com/ desde el marco con la 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 y dt = 1269901036429 y correlador = 1269901036438 y frm = 0 & ga_vid = 711,000,587.1269901037 y ga_sid = 1269901037 y ga_hid = 654061172 y ga_fc = 0 & u_tz = -240 y u_his = 2 & u_java = 1 & u_h = 900 y 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% 3Aotz // www.anek . Deben coincidir los dominios, protocolos y puertos.
(desde la consola de JavaScript de Chrome)
Los anuncios parecen mostrarse correctamente y no afectan a mi código javascript nativo. Sin embargo, a veces estos errores parecen ralentizar la carga de la página. ¿Como puedo solucionar este problema?
(Modifiqué las URL para permitirme publicar esto porque soy un usuario nuevo)
fuente
Respuestas:
Google ha estropeado su guión. No hay mucho que puedas hacer al respecto.
Por alguna razón
http://pagead2.googlesyndication.net/pagead/expansion_embed.js
, incluido en la página principal por las secuencias de comandos de AdSense, está tratando de enviar información sobre el anuncio en un recién<iframe>
creado creado para contener el anuncio, utilizando la nueva función postMessage HTML5 :ha(this, function (f, e) { d[Pa](this.a[A]+"|"+f+":"+e, this.la) });
Si. Un buen código minificado / ofuscado allí. Créame,
Pa
es'postMessage'
!El
targetOrigin
argumento de esta llamadathis.la
se establece enhttp://googleads.g.doubleclick.net
. Sin embargo, el nuevo iframe se escribió con susrc
configuración enabout:blank
. Esto no coincide con el origen de destino, por lo que el navegador debe negarse a enviar el mensaje. Sin embargo, solo Chrome parece estar lanzando un quejido real al registro de la consola al respecto.No tengo idea de por qué está haciendo esto, no importa por qué no se usa solo
'*'
como un origen de destino ... Realmente no tengo ganas de entrar en el guión ofuscado para averiguarlo. Sin embargo, este error no debería ralentizar la carga de la página. Si ve pausas, generalmente se está resolviendo y obteniendo otros scripts externos.fuente
Google está tratando de explotar una peculiaridad del navegador mediante la cual algunos navegadores ignoran la política del mismo origen para Windows con about: blank como URL, lo que permite que esa ventana envíe XMLHttpRequest o, en este caso, solicitudes de postMessage a cualquier sitio.
Hasta donde yo sé, los navegadores han desactivado este comportamiento recientemente. Debe tener uno de esos navegadores parcheados.
Con suerte, esta funcionalidad rota no afectará su capacidad para ganar dinero con los anuncios.
Es molesto para su sitio generar errores de Javascript sin culpa suya, pero es una posibilidad que debe aceptar cuando ejecuta el Javascript de otra persona en su página.
fuente
postMessage
se puede llamar en cualquier vista sin tener que tener en cuenta las mismas restricciones de origen.postMessage
. Parece que ese no es el caso aquí. (En cuanto a por qué podría ser un exploit, citando de MDC: "Si se usara postMessage para transmitir una contraseña, sería absolutamente crítico que este argumento sea un URI cuyo origen sea el mismo que el receptor previsto del mensaje que contiene la contraseña , para evitar la interceptación de la contraseña por parte de un tercero malintencionado. ")Es normal porque su navegador evita los ataques CSRF de otros sitios web.
Para permitir el
googleads...
acceso a su sitio web y solucionar este problema, cree un archivo con el nombrecrossdomain.xml
en su webroot y llénelo con el siguiente contenido:<?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>
Para probarlo, vaya a su dominio http://your-domain.com/crossdomain.xml y asegúrese de que no haya errores para esa página. También permitió utilizar comodines, etc. (consulte la referencia). Cuando haya terminado, actualice su página. Espero que ayude.
Ejemplo en vivo: http://www.blanjamudah.com/crossdomain.xml
Referencia: http://en.wikipedia.org/wiki/Cross-site_request_forgery http://curtismorley.com/2007/09/01/flash-flex-tutorial-how-to-create-a-crossdomainxml-file/
fuente
Un archivo crossdomain.xml en la raíz del sitio que permite el acceso a googleads.g.doubleclick.net debería solucionarlo.
Consulte esta página, http://www.warriorforum.com/adsense-ppc-seo-discussion-forum/458906-adsense-blank-space-problem.html
fuente
Para aquellos que llegan a esta página después de buscar el código de error de dominio y protocolo:
AdSense ha lanzado una nueva versión asíncrona de su javascript que soluciona los errores entre dominios que se generan cuando usamos su código de inserción anterior. Cuando usamos su código de inserción estándar en nuestro sitio con mucho AJAX, obtuvimos el error de dominio cruzado. Cuando implementamos su código asíncrono, y en combinación con un crossdomain.xml correctamente definido, el error entre dominios desapareció.
fuente
Este parece ser un caso de mensaje de error que enmascara la causa real. La verdadera causa es probablemente algún tipo de configuración incorrecta de Adsense; desafortunadamente, Adsense no parece hacer suficientes comprobaciones para dar un mensaje de error más relevante.
Yo mismo tuve este error y llegué a esta conclusión después de investigar los foros, donde algunas personas informaron que se solucionó después de verificar su cuenta bancaria o lo que sea. En mi caso, mi entorno del lado del servidor estaba jugando con el parámetro google_ad_client, por lo que el problema real era que ese parámetro era nulo. Una vez que lo arreglé, aparecían anuncios y no había más mensajes de error.
Entonces, en la práctica, no tiene nada que ver con la política del mismo origen. Ahora que el código de adsense es correcto, incluso ahora puedo mostrar anuncios cuando se ejecutan en localhost, así como en el servidor.
fuente
Acabo de tener un problema similar. No estoy seguro si está relacionado, pero lo explicaré de todos modos.
Tenía dos anuncios que se mostraban en mi página y quería "refactorizar" el código llamando a este script una sola vez al final de la página:
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
Mis anuncios se rompieron y descubrí que esta etiqueta de secuencia de comandos debe colocarse justo después de cada secuencia de comandos de anuncios var:
<script type="text/javascript"><!-- google_ad_client = "ca-pub-872346872364872364"; google_ad_slot = "719238712983"; google_ad_width = 728; google_ad_height = 90; //--> </script>
Pero cuando revertí mis cambios, la primera etiqueta de secuencia de comandos todavía estaba colocada en la parte inferior de mi página y, por lo tanto, intentaba cargar otra de mis etiquetas de secuencia de comandos como anuncio. Esto falló y recibí el error que vio.
Por lo tanto, verifique que mantenga las dos etiquetas de secuencia de comandos de anuncios una tras otra y en ningún otro lugar, por ejemplo:
<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>
fuente
Simplemente moviéndome
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
a la parte superior de la página arriba de los anuncios, en lugar de debajo, solucionó esto para mí.fuente
En la pestaña Sitios en su panel de Google Adsense (versión web o aplicación). Asegúrese de que su sitio esté configurado con your-domain.com (o cualquier tld) como dominio y www.your-domain.com como subdominio.
fuente