来自Google Adsense的Javascript错误
在我的几个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&广告位名称= 9210181593&W = 300&闪光= 10.0.42&URL = HTTP%3A%2F%2Fwww.anekdotz.com%2F&DT = 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 // www.anekdotz.com 。 域,协议和端口必须匹配。
(从Chrome的JavaScript控制台)
广告似乎正确显示,并不会影响我的原生JavaScript代码。 但是,有时这些错误似乎会减慢页面加载速度。 我该如何解决这个问题?
(我修改了url,让我张贴这是我是一个新用户)
谷歌已经搞糟了他们的脚本。 对此你没有太多的办法。
出于某种原因,AdSense脚本包含在父页面中的pagead/expansion_embed.html
尝试将有关广告的信息发送到新创build的<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似乎正在把一个真正的呜咽放到控制台日志里面。
不知道为什么它这样做,不必介意为什么它不只是使用'*'
作为目标起源…我真的不喜欢涉足混淆的脚本来找出。 但是,这个错误不应该导致页面加载速度变慢。 如果您看到暂停,通常会parsing并提取其他外部脚本。
谷歌试图利用浏览器的一些怪癖,一些浏览器忽略了windows的同源策略,其URL为:blank,允许该窗口提交XMLHttpRequest,在这种情况下,还可以向任何站点提交postMessage请求。
据我所知,浏览器最近已经禁用了这种行为。 你必须有一个这样的补丁浏览器。
希望这个破碎的function不会影响你从广告中赚钱的能力。
这对你的网站来说是很烦人的,通过你自己的错误来生成Javascript错误,但是当你在你的页面上运行别人的Javascript时,你必须接受这个可能性。
这很正常,因为您的浏览器阻止来自其他网站的CSRF攻击。
要允许googleads...
访问您的网站并解决此问题,请在您的webroot中创build一个名为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>
要testing它,请转到您的域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/
允许访问googleads.g.doubleclick.net的网站根目录中的crossdomain.xml文件应修复此问题。
看到这个页面, http://www.warriorforum.com/adsense-ppc-seo-discussion-forum/458906-adsense-blank-space-problem.html
对于那些在search域和协议错误代码后login到此页面的用户:
AdSense发布了一个新的asynchronous版本的JavaScript,解决了我们使用旧版embedded代码时产生的跨域错误。 当我们在我们的AJAX网站上使用他们的标准embedded代码时,我们得到了跨域错误。 当我们实现他们的asynchronous代码,并与一个正确定义的crossdomain.xml结合的跨域错误消失了。
这似乎是掩盖真正原因的错误信息的一种情况。 真正的原因可能是某种Adsense错误configuration; 不幸的是,AdSense似乎没有做足够的检查来提供更相关的错误信息。
我自己也有这个错误,在研究论坛之后得出这个结论,有些人在核实他们的银行帐户之后报告说这个错误是固定的。 在我的情况下,我的服务器端环境搞乱了google_ad_client参数,所以真正的问题是参数为空。 一旦我解决了这个问题,广告就显示出来了,没有更多的错
所以在实践中,这与同源政策无关。 既然AdSense代码是正确的,我现在甚至可以在本地主机以及服务器上运行时显示广告。
刚刚有类似的问题。 不知道是否有关系,但我会解释。
我在我的页面上显示了两个广告,只想在页面末尾调用一次脚本来“重构”代码:
<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>
但是当我还原了我的更改后,第一个脚本标记仍然放置在页面的底部,因此试图将另一个脚本标记加载为广告。 这失败了,我得到了你看到的这个错误。
所以请检查一下你是否保留了两个ads脚本标签,而不是别的,例如:
<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>
只需将<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
到广告上方的页面顶部,而不是在下面这对我来说