How can I control the background image and colour of a body element within an iframe
? Note, the embedded body element has a class, and the iframe
is of a page that is part of my site.
The reason I need this is that my site has a black background assigned to the body, and then a white background assigned to divs that contain text. A WYSIWYG editor uses an iframe
to embed content when editing, but it doesn't include the div, so the text is very hard to read.
The body of the iframe
when in the editor has a class that isn't used anywhere else, so I'm assuming this was put there so problems like this could be solved. However, when I apply styles to class.body
they don't override the styles applied to body. The weird thing is that the styles do appear in Firebug, so I've no idea what's going on!
Thanks
UPDATE - I've tried @mikeq's solution of adding a style to the class that is the body's class. This doesn't work when added to the main page's stylesheet, but it does work when added with Firebug. I'm assuming this is because Firebug is applied to all elements on the page whereas the CSS is not applied within iframes. Does this mean that adding the css after window load with JavaScript would work?
This code uses vanilla JavaScript. It creates a new
<style>
element. It sets the text content of that element to be a string containing the new CSS. And it appends that element directly to the iframe document's head.The below only works if the iframe content is from the same parent domain.
The following jquery script works for me. Tested on Chrome and IE8. The inner iframe references a page that is on the same domain as the parent page.
In this particular case, I am hiding an element with a specific class in the inner iframe.
Basically, you just append a 'style' element to the 'head' of the inner iframe.
An
iframe
has another scope, so you can't access it to style or to change its content with javascript.It's basically "another page".
The only thing you can do is to edit its own CSS, because with your global CSS you can't do anything.
Perhaps it's changed now, but I have used a separate stylesheet with this element:
to successfully style embedded youtube iframes...see the blog posts on this page.
An iframe is a 'hole' in your page that displays another web page inside of it. The contents of the iframe is not in any shape or form part of your parent page.
As others have stated, your options are:
Override another domain
iframe
CSSBy using part of SimpleSam5's answer, I achieved this with a few of Tawk's chat iframes (their customization interface is fine but I needed further customizations).
In this particular iframe that shows up on mobile devices, I needed to hide the default icon and place one of my background images. I did the following:
I do not own any Tawk's domain and this worked for me, thus you may do this even if it's not from the same parent domain (despite Jeremy Becker's comment on Sam's answer).