Javascript errors from Google Adsense
On several of my adsense running sites, I have been getting the following errors:
Unable to post message to [http://]googleads.g.doubleclick.net. Recipient has origin http://www.anekdotz.com.
Unsafe JavaScript attempt to access frame with URL [http://]www.anekdotz.com/ from frame with URL [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. Domains, protocols and ports must match.
(from the Chrome javascript console)
The ads seem to show properly and it doesn't affect my native javascript code. However sometimes these errors seem to slow down page loading. How can I fix this problem?
(I modified the URLs to let me post this as I'm a new user)
Solution 1:
Google have messed up their script. There's not much you can do about it.
For some reason http://pagead2.googlesyndication.net/pagead/expansion_embed.js
, included in the parent page by the AdSense scripts, is trying to send information about the advert into a newly-written <iframe>
created to hold the advert, using the new HTML5 postMessage facility:
ha(this, function (f, e) {
d[Pa](this.a[A]+"|"+f+":"+e, this.la)
});
Yeah. Some nice minified/obfuscated code there. Trust me, Pa
is 'postMessage'
!
The targetOrigin
argument in this call, this.la
is set to http://googleads.g.doubleclick.net
. However, the new iframe was written with its src
set to about:blank
. This doesn't match the target origin, so the browser must refuse to send the message. Only Chrome seems to be dropping an actual whinge to the console log about it though.
No idea why it's doing this at all, never mind why it's not just using '*'
as a target origin... I'm not really feeling like wading into the obfuscated script to find out. However, this error should not cause page loading to slow down. If you're seeing pauses it's usually resolving and fetching other external scripts.
Solution 2:
Google's trying to exploit a browser quirk whereby some browsers ignore the same-origin policy for windows with about:blank as the URL, allowing that window to submit XMLHttpRequest or, in this case, postMessage requests to any site.
As far as I know, browsers have recently been disabling this behaviour. You must have one such patched browser.
Hopefully, this broken functionality doesn't affect your ability to earn money from the ads.
It's annoying for your site to generate Javascript errors through no fault of your own, but it is a possibility you must accept when you run someone else's Javascript on your page.