views:

41

answers:

2

We try to display the google ad in an iframe that we add dynamically. In an iframe, the field "src" is generally an url, but we want to use the data:text/html format to be able to use directly our ad code. It works for simple JavaScript code like a document.write('hello world')<\script>, but not with the google ad code. We simulate this in an html file :

<html>
    <head>
        <script src="http://code.jquery.com/jquery-latest.min.js"&gt;&lt;/script&gt;
        <script type="text/javascript">

            function resizeFrame(f) {
                f.style.height = 60 + "px";
            }

            $(document).ready(function() {;

                var htmlCode = document.createElement("div"); 
                var head = document.getElementById('google_ad_468x60');
                var myFrame = document.createElement("iframe")
                    myFrame.name      = "childframe"
                    myFrame.id        = "childframe"

                    myFrame.src       = "data:text/html, " + "<script>" + "<!--\ngoogle_ad_client = \"pub-0123456789abcdef\";\ngoogle_alternate_color = \"FFFFFF\";\ngoogle_ad_width = 468;\ngoogle_ad_height = 60;\ngoogle_ad_format = \"468x60_as\";\ngoogle_ad_channel =\"0123456789\";\ngoogle_color_border = \"FFFFC6\";\ngoogle_color_bg = \"FFFFFF\";\ngoogle_color_link = \"000000\";\ngoogle_color_url = \"666666\";\ngoogle_color_text = \"333333\";\n//-->"+"<\/script>"+ "<script src = \"http://pagead2.googlesyndication.com/pagead/show_ads.js\"&gt;"+"&lt;\/script&gt;"

                    myFrame.width     = "468"
                    myFrame.scrolling = "no"
                    myFrame.setAttribute('marginheight', '0px')
                    myFrame.setAttribute('marginwidth' , '0px')
                    myFrame.setAttribute('frameborder' , '0'  )
                head.appendChild(myFrame)

            });



        </script>

    </head>

    <body onload="resizeFrame(document.getElementById('childframe'))"  bgcolor="#FFFF00">

        <div>
            <h1>Before Google ad</h1>
        </div>

        <div id="google_ad_468x60">
            <-- Here is display the the Google ad --!>
        </div>

        <div>
            <h1>After Google ad</h1>
        </div>

    </body>

</html>

We do not have an error with Mozilla, but with Chrome we have this error, in both case the google ad is not displayed:

Unsafe JavaScript attempt to access frame with URL oursitewiththetestfile.com from frame with URL  file:///home/lucas/Bureau/google_ad.html from frame with URL data:text/html, <script>google_comments</script> <script type="text/javascript" src="google_path.js"></script>. Domains, protocols and ports must match
+1  A: 

In Chrome's intent to keep hackers and virus creators at bay, they do not allow access to an iframe using javascript when it is communicating with a different domain then the site it is hosted on.

You are going to be stuck in this method and I am unsure that there is a workaround. Either way, Google ads should be placed directly into the website as it uses the content to generate relevant advertisements to be displayed on the page. If you are looking for a way to display your own advertisements, it should either be done dynamically, written in the code language of choice, or using the ad creator on adsense.google.com to display your own ads instead of public service ads.

I personally feel that it would be much more simple that way.

BigRossLabs
But Firefox doesn't display the ad neither. Do you think it is for the same reasons ? And what for IE ?We will try another method if there is really no way to fix that.
Lucas
Most likely due to many websites being attacked by hackers using iframes with Javascript. Like David said, it is also against there terms and conditions. An iframe is still a frame, no matter how you look at it.
BigRossLabs
A: 

Google does not want you to put ads in a frame and will ban you if they find out... Its in the terms of service section 5...

David
We don't put it in a frame but an iframe, and when you click on it a full new page is opened, so I don't think that google cares.But it was good to read this terms again !
Lucas