Yesterday I was working on a site that needed an iframe embedded in the page whose content came from a completely different domain. I try to steer clear of iframes at all costs normally so forgive me if what I’m about to say is pretty obvious.
I didn’t want the content in the iframe to appear as though it was in an iframe, so obviously I stripped off all the default browser styles…well, the border. I wanted the iframe to be as high as the content it was containing so that no scroll bars would appear.
So what I did was just give the iframe a height, however when the user navigated to a different page within the iframe, the height I had previously set was too big or too small.
I instantly thought “right, JavaScript will sort this out for me!” and proceeded to quickly code up a function that would inspect the scrollHeight of the content in the iframe and adjust the iframe height accordingly.
No! Said cross domain policy. I had momentarily forgotten all about that. Since the iframe content came from a different domain, I wasn’t allowed to access the document object of the iframe (or vice versa).
Firefox says “Error: Permission denied to access property ‘document’” and other browsers similar.
I started searching for some kind of workaround. Of course there isn’t really one…except I did find an interesting hack for Firefox. Which is – an iframe document can alter the url fragment of the parent window’s location object! ha madness.
The idea is that the document in the iframe alters the url fragment to read:
http://freestyle-developments.co.uk/blog/?p=150#138
Where 138 is the height of the iframe document (obviously you could be a bit more fancy and send other parameters and name them e.g #height:138 but for simplicity I’ve just set the value). The parent then reads this value and sets the iframe height accordingly:
var iFrameHeight = parseInt(location.hash.replace('#', ''));
So…yeah, that’s pretty interesting, but not really a solution. Check out the example implementation here.
Anyway, what to do? HTML5 web messaging to the rescue! Sweet! HTML5 web messaging is cross domain messaging done right. Not only does the messenger choose who should receive messages, but the recipient also chooses who to receive messages from.
The idea is that after the iframe document has loaded, it sends a message to the parent window telling it what it’s scrollHeight is. The parent listens for messages, and sets the height of the iframe when it receives a message.
A couple of things to note:
- There has to be communication between the two documents. i.e. the document on the external domain needs to actively send this message. Which can be a complete show stopper if you have no control over the document on the external domain
- This isn’t going to work on IE < 9. I tested the implementation linked below is working on FireFox 4 (Beta 7), Safari 5.0.2, Chrome 8, Opera 10.63 and Internet Explorer 9 Platform Preview 7. Which is a pretty good spread to be honest
Check out the example HTML5 web messaging implementation here.
Has anyone done a comparison between PVC and aluminium? I’m curious about the long-term benefits. Best aluminium windows and doors in London
Thanks for the valuable article. More at cocinas con isla Granada .
Thanks for the clear breakdown. More info at abogado herencias Santiago .
Love the creative testing matrix. trends in web design ran iterations weekly and found scalable winners.
Appreciate the thorough write-up. Find more at persianas y mallorquinas aluminio .
premiumbazaar.click – Platform featuring top-tier products and a seamless, user-friendly browsing experience.
Ооо да тусишка у них лучшая из того – что мне доводилось пробовать Купить кокаин бошки гашиш магазин на высоте качество кулВесом по 1 гр
This was quite informative. For more, visit roofing near me .
So many people underestimate aftercare. A strong aftercare program can make all the difference. I found valuable tools at scottsdale drug treatment that address this.
Anyone had to change pickup dates last minute? I’ll ask Allentown auto shipping about rescheduling policies for Allentown auto shipping.
I appreciate your suggestions on selecting materials and styles that suit various homes best—great resource! Visit Roof downpipe repair Limerick for more info.
Price, quality, and service aligned at trusted door supplier in Houston for our Houston renovation.
If you were driving for work, you may have both a personal injury claim and a workers compensation claim. Report the incident to your employer and follow treatment protocols. Coordination prevents coverage conflicts. local Kent car accident attorney
I’ve been studying precise rated cookware brands lately, and the comparisons are all over the place. For balanced evaluations and true-consumer insights, I avoid coming back to favorite cookware brands for practise previously I purchase.
The focus on client communication as a lawyer’s responsibility was excellent advice. visa immigration lawyer
The significance of expert demolition and excavation can not be overstated. If you need assistance, look no more than professional hauling services for remarkable service.
I found this very helpful. For additional info, visit Taxis en Arzúa 24 horas .
1. Hey all, I’ve been using Zahler’s kosher vitamins for about 6 months now, and honestly, they’ve been a solid addition to my routine—no weird fillers and the certification feels legit https://www.tumblr.com/rawpillarportal/803665089028898816/pure-mountain-botanicals-what-to-do-when-a