79

在我的几个 adsense 运行网站上,我收到以下错误:

无法将消息发布到 [ http://]googleads.g.doubleclick.net。收件人来自 http://www.anekdotz.com

不安全的 JavaScript 尝试从具有 URL [ http://]googleads.g.doubleclick.net/pagead/ads?client=ca-pub-9099580055602120&output=的框架访问具有 URL [ http://]www.anekdotz.com/的框架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 代码。然而,有时这些错误似乎会减慢页面加载速度。我该如何解决这个问题?

(我修改了网址,让我发布这个,因为我是一个新用户)

4

9 回答 9

81

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

出于某种原因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 对控制台日志发出了真正的抱怨。

根本不知道它为什么要这样做,更不用说它为什么不只是'*'用作目标来源......我真的不想涉足混淆脚本来找出答案。但是,此错误不应导致页面加载速度变慢。如果您看到暂停,通常是在解析和获取其他外部脚本。

于 2010-03-30T00:36:01.197 回答
15

Google 试图利用浏览器的一个怪癖,即一些浏览器会忽略 URL 为 about:blank 的窗口的同源策略,从而允许该窗口向任何站点提交 XMLHttpRequest 或 postMessage 请求。

据我所知,浏览器最近一直在禁用这种行为。你必须有一个这样的补丁浏览器。

希望这个损坏的功能不会影响您从广告中赚钱的能力。

您的网站会因您自己的过错而生成 Javascript 错误,这很烦人,但是当您在页面上运行其他人的 Javascript 时,您必须接受这种可能性。

于 2010-04-20T02:07:22.103 回答
8

这很正常,因为您的浏览器阻止了来自其他网站的 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/

于 2013-08-17T07:47:22.973 回答
4

站点根目录中允许访问 googleads.g.doubleclick.net 的 crossdomain.xml 文件应该可以修复它。

请参阅此页面,http://www.warriorforum.com/adsense-ppc-seo-discussion-forum/458906-adsense-blank-space-problem.html

于 2012-10-22T13:43:19.627 回答
4

对于那些在搜索域和协议错误代码后登陆此页面的人:

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

于 2013-10-09T14:18:59.673 回答
1

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

我自己也遇到了这个错误,并在研究论坛后得出了这个结论,有些人在验证他们的银行账户或其他什么后报告它已修复。在我的例子中,我的服务器端环境弄乱了 google_ad_client 参数,所以真正的问题是该参数为空。一旦我解决了这个问题,广告就会显示并且没有更多的错误消息。

所以在实践中,它真的与同源策略无关。现在 adsense 代码是正确的,我什至现在可以在 localhost 和服务器上运行时显示广告。

于 2011-08-17T23:38:45.920 回答
1

刚遇到类似的问题。不确定它是否相关,但无论如何我都会解释。

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

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

我的广告坏了,我发现这个脚本标签必须放在每个 ads 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>
于 2013-02-16T15:24:37.800 回答
1

只需移动<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>到广告上方的页面顶部,而不是下方,即可为我解决此问题

于 2016-09-03T17:56:41.283 回答
0

在 Google Adsense 信息中心(网页版或应用版)的“网站”标签中。确保您的站点设置为使用your-domain.com(或任何 tld)作为域,并将www.your-domain.com作为子域。

于 2019-06-15T06:50:14.717 回答