来自 Google Adsense 的 Javascript 错误
Posted
技术标签:
【中文标题】来自 Google Adsense 的 Javascript 错误【英文标题】:Javascript errors from Google Adsense 【发布时间】:2011-02-02 06:19:33 【问题描述】:在我的几个 Adsense 运行网站上,我遇到了以下错误:
无法将消息发布到 [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 代码。然而,有时这些错误似乎会减慢页面加载速度。我该如何解决这个问题?
(我修改了网址,让我作为新用户发布此内容)
【问题讨论】:
anekdotz.com 是您的网站吗? 这里有同样的问题。这篇文章是一年前的!如果它是一个谷歌问题,它是怎么解决的!?它还杀死了网站上的其他 js。据此,它似乎仅与排行榜广告有关.. google.com/support/forum/p/AdSense/… 提交问题到 google adsense.... @user257493 - 在 adsense 组/支持页面上有很多人遇到同样问题的例子,我还没有看到任何人有解决办法。最后会提交问题,但我知道这需要一段时间。 与谷歌地图 iframe 相同,是的,谷歌可以打破规则。希望它不会破坏 seo 排名 ;-) 【参考方案1】:Google 搞砸了他们的脚本。您对此无能为力。
出于某种原因,由 AdSense 脚本包含在父页面中的 http://pagead2.googlesyndication.net/pagead/expansion_embed.js
正在尝试使用新的 HTML5 postMessage 工具将有关广告的信息发送到为保存广告而创建的新编写的 <iframe>
中:
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 对控制台日志发出了真正的抱怨。
根本不知道它为什么要这样做,更不用说它为什么不只是使用'*'
作为目标来源...我真的不想涉足混淆脚本来找出答案。但是,此错误不应导致页面加载速度变慢。如果您看到暂停,通常是在解析和获取其他外部脚本。
【讨论】:
您好,感谢您的提醒。是的,我不确定它是否真的减慢了页面速度,但它会在页面显示加载时在底部显示浏览器“加载页面”通知。这很烦人,也可能会打扰一些认为应该等到浏览器关闭的用户。我希望他们能尽快解决这个问题。 我也有这个错误,不是特别慢,但我意识到它使其他 JS 停止工作,比如 fb 社交应用程序集成。我想知道这怎么还没解决呢。 我可以补充一下:这只发生在我安装了广告拦截器的特定 Chrome 会话中。我禁用了特定 URL 的插件,仍然触发了原始错误消息。如果在隐身窗口中打开同一个站点,问题就会消失。 这个答案在 2018 年仍然有效吗?【参考方案2】:Google 试图利用浏览器的一个怪癖,即某些浏览器会忽略 URL 为 about:blank 的窗口的同源策略,从而允许该窗口向任何站点提交 XMLHttpRequest 或在本例中为 postMessage 请求。
据我所知,浏览器最近一直在禁用此行为。你必须有一个这样的补丁浏览器。
希望这种损坏的功能不会影响您从广告中赚钱的能力。
您的网站会因您自己的过错而生成 Javascript 错误,这很烦人,但当您在页面上运行其他人的 Javascript 时,您必须接受这种可能性。
【讨论】:
"允许该窗口向任何站点提交 ... postMessage 请求" 这是一个怎样的漏洞?postMessage
可以在任何视图上调用,而无需考虑同源限制。
它可能被称为,当然。但是消息本身是否被发送取决于目标窗口在接收消息时是否具有postMessage
的第二个参数所描述的来源。看来这里不是这样。 (至于为什么它可能是一个漏洞,引用 MDC 的话:“如果 postMessage 用于传输密码,那么这个参数是一个 URI 是绝对关键的,它的来源与包含密码的消息的预期接收者相同, 以防止恶意第三方截取密码。")【参考方案3】:
这是正常的,因为您的浏览器阻止了来自其他网站的 CSRF 攻击。
要允许googleads...
访问您的网站并解决此问题,请在您的网站根目录中创建一个名为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/
【讨论】:
这对我不起作用,它可能与 Flash Player 有关。【参考方案4】:站点根目录中允许访问 googleads.g.doubleclick.net 的 crossdomain.xml 文件应该可以修复它。
查看此页面,http://www.warriorforum.com/adsense-ppc-seo-discussion-forum/458906-adsense-blank-space-problem.html
【讨论】:
【参考方案5】:对于搜索域名和协议错误码后登陆该页面的用户:
AdSense 发布了新的async version javascript,解决了我们使用旧嵌入代码时产生的跨域错误。当我们在我们的 AJAX 重站点上使用他们的标准嵌入代码时,我们得到了跨域错误。当我们实现他们的异步代码时,in combination with a properly defined crossdomain.xml 跨域错误消失了。
【讨论】:
【参考方案6】:这似乎是错误消息掩盖了真正原因的情况。真正的原因可能是某种 Adsense 配置错误;不幸的是,Adsense 似乎没有做足够的检查来给出更相关的错误消息。
我自己也遇到了这个错误,并在研究论坛后得出了这个结论,有些人在验证他们的银行账户或其他什么后报告它已修复。在我的例子中,我的服务器端环境弄乱了 google_ad_client 参数,所以真正的问题是该参数为空。一旦我解决了这个问题,广告就会显示并且没有更多的错误消息。
所以在实践中,它实际上与同源策略无关。现在 adsense 代码是正确的,我什至现在可以在 localhost 和服务器上运行时展示广告。
【讨论】:
【参考方案7】:刚刚遇到类似的问题。不确定是否相关,但我还是会解释一下。
我的页面上显示了两个广告,并希望通过仅在页面末尾调用一次此脚本来“重构”代码:
<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>
【讨论】:
【参考方案8】:只需将<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
移动到广告上方的页面顶部,而不是下方,即可为我解决此问题
【讨论】:
奇怪的行为【参考方案9】:在您的 Google Adsense 信息中心(网页版或应用版)的“网站”标签中。确保您的网站设置有 your-domain.com(或任何一个 tld)作为域,www.your-domain.com 作为子域。
【讨论】:
以上是关于来自 Google Adsense 的 Javascript 错误的主要内容,如果未能解决你的问题,请参考以下文章