来自 Google Adsense 的 Javascript 错误

在我的几个广告运行网站上,我都出现了以下错误:

无法将邮件发送到[ http://]googleads.g.doubleclick.net。 接受者有来源 Http://www.anekdotz.com

不安全的 JavaScript 尝试访问 带 URL 的帧 [ http://]www.anekdotz.com/从帧 网址 [ 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,让我发布这个,因为我是一个新用户)

64237 次浏览

谷歌搞砸了他们的脚本,你对此无能为力。

出于某种原因,包含在 AdSense 脚本的父页面中的 http://pagead2.googlesyndication.net/pagead/expansion_embed.js,正试图将广告信息发送到一个新编写的 <iframe>中,这个 <iframe>使用新的 HTML5 邮件工具来保存广告:

            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 在控制台日志中提到了这个问题。

完全不知道它为什么要这样做,更不用说它为什么不仅仅使用 '*'作为目标源... 我真的不想费劲地研究这个模糊的脚本来找出答案。但是,此错误不应导致页加载速度减慢。如果您看到暂停,通常是解析和获取其他外部脚本。

谷歌试图利用浏览器的一个怪异之处,即一些浏览器忽略了窗口的同源策略,这些窗口使用 about: space 作为 URL,允许该窗口向任何网站提交 XMLHttpRequest,或者在这种情况下,向任何网站发送 postMessage 请求。

据我所知,浏览器最近已经禁用了这种行为。

希望这个不完善的功能不会影响你从广告中赚钱的能力。

你的站点生成 Javascript 错误并不是你自己的错误,这很烦人,但是当你在你的页面上运行别人的 Javascript 时,你必须接受这种可能性。

这似乎是错误消息掩盖真正原因的情况。真正的原因可能是某种 Adsense 错误配置; 不幸的是,Adsense 似乎没有进行足够的检查来提供更相关的错误消息。

我自己也有这样的错误,在研究论坛之后得出了这个结论,在论坛上有些人报告说,在核实了他们的银行账户或者其他什么之后,这个问题被修正了。在我的例子中,我的服务器端环境与 google _ ad _ client 参数混淆了,所以真正的问题是这个参数为 null。一旦我修复,广告显示,没有更多的错误消息。

所以实际上,这和同源政策没有任何关系。既然 adsense 代码是正确的,我现在甚至能够在本地主机和服务器上运行时显示广告。

如果站点根目录中有 Crossdomain.xml 文件,允许访问 googleads.g.doubleclick.net 应该可以修复这个问题。

看这页 http://www.warriorforum.com/adsense-ppc-seo-discussion-forum/458906-adsense-blank-space-problem.html

只是有个类似的问题,不确定是否有关,但我还是会解释的。

我的页面上显示了两个广告,我想通过在页面末尾只调用一次这个脚本来“重构”代码:

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

我的广告中断了,我发现这个 script 标签必须放在每个 ad 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 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>

这很正常,因为你的浏览器可以防止来自其他网站的 CSRF 攻击。

为了让 googleads...访问你的网站并解决这个问题,在你的 webroot 中创建一个名为 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/

对于那些在搜索域和协议错误代码后登录到此页面的用户:

AdSense 发布了一个新的 javascript 异步版本,解决了当我们使用旧的嵌入代码时产生的跨域错误。当我们使用他们的标准嵌入代码在我们的 AJAX 重网站,我们得到了跨域错误。当我们实现它们的异步代码和 与正确定义的 cross domain.xml 结合使用时,跨域错误消失了。

简单地移动 <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>到页面顶部的广告,而不是下面,为我修复这一点

在你的谷歌广告仪表板(网络或应用程序版本)的网站选项卡。确保您的站点设置为以 Your-domain.com(或任何 tld)作为域,以 Www.your-domain.com作为子域。