来自Google Adsense的Javascript错误


79

在我的多个adsense运行网站上,出现以下错误:

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

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

(我修改了网址,以便当我是新用户时可以发帖)


是anekdotz.com您的网站吗?
Pekka 2010年

1
这里同样的问题。这篇文章来自大约一年前!如果是谷歌问题,那怎么解决呢?它还杀死了网站上的其他js。根据这一点,似乎与横幅广告的唯一.. google.com/support/forum/p/AdSense/...
UpTheCreek

将该问题提交给Google adsense
。...–隐身

@ user257493-adsense群组/支持页面上有很多人遇到相同问题的示例,而我还没有看到有人修复过这个问题。最终将提交问题,但我知道这需要一个年龄。
UpTheCreek 2011年

3
与Google Maps iframe一样,是的,Google可以违反规则。希望它不会破坏seo排名;-)
Jacob Lowe

Answers:


81

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似乎在向控制台日志发送了实际信息。

不知道为什么要这么做,不要介意为什么不只是将其'*'用作目标原点……我并不是真的想涉足混淆的脚本以进行查找。但是,此错误不应导致页面加载速度降低。如果您看到暂停,通常是在解析和获取其他外部脚本。


嘿,谢谢大家的注意。是的,我不确定它是否真的在减慢页面速度,但是当页面显示为已加载时,它会在底部显示浏览器的“正在加载页面”通知。这很烦人,可能还会打扰一些认为应该等待浏览器关闭的用户。我希望他们能对此有所作为。
Arjun

4
我也遇到了这个错误,尤其是运行缓慢,但我意识到这正在使其他JS停止工作,例如fb社交应用程序集成。我不知道如何解决这个问题。
Mescalito 2011年

我可以补充:这仅在安装了广告拦截器的特定Chrome会话上发生。我禁用了特定URL的插件,但仍触发了原始错误消息。如果在隐身窗口中打开同一站点,该问题将消失。
安德列斯SK

这个答案在2018年仍然有效吗?
InTheNameOfScience

15

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

据我所知,浏览器最近已经禁用了这种行为。您必须拥有一个这样的修补浏览器。

希望该功能失效不会影响您从广告中获利的能力。

您的站点无缘无故地产生Javascript错误很烦人,但是当您在页面上运行其他人的Javascript时,您必须接受这种可能性。


“允许该窗口向任何站点提交... postMessage请求”这是一个什么漏洞?postMessage可以在任何视图上调用,而不必考虑相同的原点限制。
伊莱·格雷

1
当然可以这样称呼它。但是,是否发送消息本身取决于接收消息时目标窗口是否具有的第二个参数描述的来源postMessage。似乎并非如此。(关于为什么可能成为漏洞利用,引用MDC的话:“如果使用postMessage传输密码,则此参数必须是URI,其来源与包含密码的消息的预期接收者相同,这是绝对关键的,以防止恶意第三方拦截密码。”)
Jeff Walden

7

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

要允许googleads...访问您的网站并解决此问题,请crossdomain.xml在您的webroot中创建一个名为的文件,并用以下内容填充该文件:

<?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/


1
这对我不起作用,可能与Flash Player有关。
fmalina 2015年


4

对于在搜索域和协议错误代码后进入此页面的用户:

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


1

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

我本人遇到这个错误,并在研究了论坛后得出了这个结论,有人在证实他们的银行帐户或其他内容后,将其修复。就我而言,我的服务器端环境搞砸了google_ad_client参数,因此真正的问题是该参数为null。解决此问题后,广告就会展示,并且不再显示错误消息。

因此,实际上,这与同源政策完全无关。既然adsense代码正确无误,那么我现在甚至可以在localhost和服务器上运行时展示广告。


1

刚遇到类似的问题。不知道它是否相关,但是我还是会解释。

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

<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

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


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.