来自 Google Adsense 的 Javascript 错误

IT技术 javascript adsense
2021-03-19 15:27:18

在我的几个运行 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&flash= 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&xwww.fd=153&xwww.fk=http:// . 域、协议和端口必须匹配。

(来自 Chrome javascript 控制台)

广告似乎可以正常显示,并且不会影响我的原生 JavaScript 代码。然而,有时这些错误似乎会减慢页面加载速度。我该如何解决这个问题?

(我修改了 URL 以让我发布此内容,因为我是新用户)

6个回答

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

出于某种原因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 会在控制台日志中删除有关它的实际抱怨。

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

我可以补充一下:这只发生在我安装了广告拦截器的特定 Chrome 会话中。我禁用了特定 URL 的插件,但仍然触发了源错误消息。如果在隐身窗口中打开同一个站点,问题就会消失。
2021-04-26 15:27:18
我也有这个错误,不是特别慢,但我意识到它让其他 JS 停止工作,比如 fb 社交应用程序集成。我想知道这还没有修复怎么办。
2021-05-02 15:27:18
这个答案在 2018 年仍然有效吗?
2021-05-06 15:27:18
您好,感谢您的提醒。是的,我不确定它是否真的在减慢页面速度,但它会在页面显示加载时在底部显示浏览器“加载页面”通知。这很烦人,也可能会打扰一些认为应该等到浏览器关闭的用户。我希望他们尽快为此做点什么。
2021-05-10 15:27:18

谷歌试图利用浏览器的一个怪癖,即一些浏览器会忽略以 about:blank 作为 URL 的窗口的同源策略,允许该窗口提交 XMLHttpRequest,或者在这种情况下,向任何站点提交 postMessage 请求。

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

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

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

“允许该窗口向任何站点提交...... postMessage 请求” 这是一个漏洞利用?postMessage可以在任何视图上调用而无需考虑同源限制。
2021-04-26 15:27:18
当然可以这样称呼它。但是消息本身是否被发送取决于目标窗口在接收消息时是否具有第二个参数所描述的来源postMessage这里似乎不是这样。(至于为什么它可能是一个漏洞,引自 MDC:“如果使用 postMessage 来传输密码,那么这个参数是一个 URI 是绝对关键的,其来源与包含密码的消息的预期接收者相同, 以防止恶意第三方截取密码。")
2021-05-06 15:27:18

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

这对我不起作用,它可能与 Flash Player 相关。
2021-05-14 15:27:18

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

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

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

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