www.webdeveloper.com
+ Reply to Thread
Results 1 to 14 of 14
  1. #1
    Join Date
    Jan 2006
    Posts
    6

    Javascript execution inside innerHTML

    Hello,

    I'm trying to insert a javascript into html code, using innerHTML.

    I can't manage to make this javascript beeing executed.

    Here is the code :

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>test</title>
    </head>

    <body>

    <!-- replace -->

    <script language="javascript" type="text/javascript" src="bots.js"></script>

    </body>
    </html>
    bots.js :
    var HTML_page = document.body.innerHTML;

    var maReg = new RegExp("<!-- replace -->") ;

    var result = HTML_page.replace( maReg, '<script language="javascript" type="text/javascript">alert("ho");</script> hello world' ) ;

    document.body.innerHTML = result;
    The javascript alert("ho") isn't executed...

    How can i fix that ?

  2. #2
    Join Date
    Apr 2005
    Location
    Bathurst, NSW, Australia
    Posts
    3,357
    I dont think thats possible.
    The answer to all these questions is Google.
    Give your thread a useful title | Webdeveloper.com Acceptable Use Policy
    Something wrong with your code? Validate first! |

    No Australian Net Censorship! The Australian government is wanting to follow in China's footsteps and "provide" nationwide Internet censorship, don't let them!

  3. #3
    Join Date
    Dec 2003
    Location
    Bucharest, ROMANIA
    Posts
    15,427
    is possible, but on using DOM methods, not innerHTML. But not on inserting javascript code, but changing the SRC of the <script> to another external JS file

  4. #4
    Join Date
    Apr 2005
    Location
    Bathurst, NSW, Australia
    Posts
    3,357
    yeh, it just didnt make sense to me being able to manipulate the innerHTML and do that.
    The answer to all these questions is Google.
    Give your thread a useful title | Webdeveloper.com Acceptable Use Policy
    Something wrong with your code? Validate first! |

    No Australian Net Censorship! The Australian government is wanting to follow in China's footsteps and "provide" nationwide Internet censorship, don't let them!

  5. #5
    Join Date
    Dec 2003
    Location
    Bucharest, ROMANIA
    Posts
    15,427
    Yes, mserver tell us in fact which is your final aim, and we might find a resonable solution.

  6. #6
    Join Date
    Jan 2006
    Posts
    6
    Thanks for your help.

    The final aim of this script is to put an external javascript ad code where "<!-- replace -->" is found on the page.

    -----
    I hope you will support Romania join EU
    Esti roman ?

  7. #7
    Join Date
    Dec 2003
    Location
    Bucharest, ROMANIA
    Posts
    15,427
    Isn't it a server-side application better? maybe php...
    Quote Originally Posted by mserver
    Esti roman ?
    Join Date: Dec 2003
    Location: Bucharest, ROMANIA
    Posts: 4,305

  8. #8
    Join Date
    Jan 2006
    Posts
    6
    Isn't it a server-side application better? maybe php...
    I want to make it work on html pages. That's why i'm not using php.

    Join Date: Dec 2003
    Location: Bucharest, ROMANIA
    Posts: 4,305
    I'm French, living in Romania (Bucharest) since July 2004

  9. #9
    Join Date
    Dec 2003
    Location
    Bucharest, ROMANIA
    Posts
    15,427
    Let me see if this is what you want. here's an example:
    in the page:
    PHP Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd">
    <
    html>
    <
    head>
    <
    title>Untitled Document</title>
    <
    meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <
    meta http-equiv="Content-Style-Type" content="text/css">
    <
    meta http-equiv="Content-Script-Type" content="text/javascript">
    <
    script type="text/javascript">
    onload=function(){
    var 
    mys document.createElement('script');
    mys.setAttribute('type','text/javascript');
    mys.setAttribute('src','myjs.js');
    var 
    kids=document.getElementsByTagName('body')[0].childNodes
    for(var i=0;i<kids.length;i++){
    if(
    kids[i].nodeType==8&&kids[i].nodeValue.indexOf('replace')>-1){
    kids[i].parentNode.insertBefore(mys,kids[i].nextSibling);
    break
    }
    }

    }
    </script>
    </head>
    <body>
    <!-- replace -->
    <input type="button" value="CallAlert" onclick="callAlert()">
    </body>
    </html> 
    in your external js file
    PHP Code:
    function callAlert(){
    alert('foo')

    Explanation:
    The code creates a script element and sets some attributes.

    var mys = document.createElement('script');
    mys.setAttribute('type','text/javascript');
    mys.setAttribute('src','myjs.js');

    Sets a variable - the collection of all the childNodes of the body and circles through them

    var kids=document.getElementsByTagName('body')[0].childNodes
    for(var i=0;i<kids.length;i++){
    ......
    }
    if the childNode is a comment (nodeType==8) and if the string "replace" is a substring of the childNode nodeValue (nodeValue.indexOf('replace')>-1) then append the script element imediately after the comment

    kids[i].parentNode.insertBefore(mys,kids[i].nextSibling);

  10. #10
    Join Date
    Jan 2006
    Posts
    6
    Thanks a lot for your help.

    It's working with a simple js, but not with a google adsense js like below :

    <script type="text/javascript"><!--
    google_ad_client = "XXXX";
    google_alternate_ad_url = "XXXX";
    google_ad_width = 468;
    google_ad_height = 60;
    google_ad_format = "468x60_as";
    google_ad_type = "text";
    google_ad_channel ="XXXX";
    google_color_border = "FAFCE2";
    google_color_bg = "FAFCE2";
    google_color_link = "006600";
    google_color_url = "006600";
    google_color_text = "000000";
    //--></script>
    <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

  11. #11
    Join Date
    Dec 2003
    Location
    Bucharest, ROMANIA
    Posts
    15,427
    That is another thing. That launch some functions which need some variables/parameters pre-set. The code will not work even if you simply write:

    <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
    </script>

    You will get the same error, so that is not a problem of inserting dynamically a script (that means my code is correct) but a problem to handle that external code

  12. #12
    Join Date
    Jan 2006
    Posts
    6
    Is there a way to insert this kind of code ?
    I've also heard about the eval function, but i have no idea if i can use it for this purpose.
    Unfortunately, i can't use php, because the script will be inserted on html pages...

  13. #13
    Join Date
    Jan 2005
    Posts
    335
    Quote Originally Posted by mserver
    ... i can't use php, because the script will be inserted on html pages...
    Then use SSI

  14. #14
    Join Date
    Jan 2006
    Posts
    6
    I finally will use
    AddType application/x-httpd-php .htm
    AddType application/x-httpd-php .html
    to use php into html files.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

     

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
HTML5 Development Center



Recent Articles