Applying CSS within an iFrame

I'm trying to change the width of my ad image from pixels to percentages. I'm using Google DoubleClick or "DFP". It automatically puts your ad image inside an iframe, making it very hard to change the actual dimensions of the image.

So, the way I've gone about changing the images width from pixels to percentage is, I made a div (that is 90% of the webpage) wrapped around the image ad and then set the image's width to 100% so when the wrappers width changes on browser width resize, the image within it will always fill up the wrapper. But I don't know how to make this all work since the image is within an iframe (stupid DFP!!!)

Here is the CSS codes for... the wrapper:

#div-gpt-ad-1362958263281-0 {width:90%; border:1px solid black;}

then the iframe which is in the wrapper:

iframe {width:100%;}

then finally the actual image in which i tried a few CSS selectors and different div classes:

.img_ad, a#aw0, iframe>.img_ad, iframe>#google_image_div>.img_ad {width:100%; display:block; border:1px solid red !important;}

If you inspect element in Google Chrome on the ad image, you will see that the CSS isn't being applied to the image. All I'd like to do is change the images width into a percentage.. and also the height to auto. Should it really be this hard? Is this even possible since the image is in an iframe? Is DFP setting me up for failure? I just don't know... But, how would I alter the image ad's code? Any help would truly truly truly be appreciated guys! :)

Here is the jsFiddle: http://jsfiddle.net/EptwH/3/

Answers:

Answer

The iframe here is on a different domain. You can't modify it's contents with CSS or JS.

Answer

I found that I could use the synchronous loading, in junction with the "smart iframe" Google touts, that I could rip the link out of their iframe and place it in my DOM.

Note that I pass the same id for the dfp code to my AdjustGoogleAd method. I'm messing with the width/height attributes because we're on a responsive site.

<script type='text/javascript'>
    (function () {
        var useSSL = 'https:' == document.location.protocol;
        var src = (useSSL ? 'https:' : 'http:') +
        '//www.googletagservices.com/tag/js/gpt.js';
        document.write('<scr' + 'ipt src="' + src + '"></scr' + 'ipt>');
    })();
</script>
<script type='text/javascript'>
    googletag.defineSlot('{AD SLOT HERE}', [WIDTH, HEIGHT], 'dfp-div-id').addService(googletag.pubads());
    googletag.pubads().enableSyncRendering();
    googletag.pubads().enableSingleRequest();
    googletag.enableServices();

    $(function () {
        AdjustGoogleAd('dfp-div-id');
    });

    function AdjustGoogleAd(bannerId) {
       var banner = $('#' + bannerId);
       var contents = $('#' + bannerId + ' iframe').contents();

       contents.find('a').clone().attr('id', bannerId + '_a').appendTo('#' + bannerId);
       var newLink = $('#' + bannerId + '_a');
       newLink.siblings().remove();
       newLink.find(".img_ad").removeAttr('height').removeAttr('width');
    }

</script>

With HTML:

<div id='dfp-div-id'>
     <script type='text/javascript'>
         googletag.display('dfp-div-id');
     </script>
</div>
Answer

Here is a jsfiddle with an example of what I am pretty sure you want to do... so yes it is possible... whether it violates the terms of DFP is another question!

http://jsfiddle.net/e3dUT/ (resize the panes to see it working, only working 100% in chrome at the moment, but that should just be a matter of tweaking it some more.)

$.dfp({
    dfpID: '12589173',
    afterAllAdsLoaded: function ($adUnits) {
        $('iframe').attr('width', '100%').attr('height', '100%');
        $adUnits.each(function () {
            $contents =  $(this).find('iframe:first').contents();
            $contents.find('img').width('100%').height('auto');
        });
    }
});

It uses the jQuery DFP plugin I created, but with a bit of work you could implement this in stock javascript as well.

Tags

Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us Javascript

©2020 All rights reserved.