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 ?
I dont think thats possible.
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
yeh, it just didnt make sense to me being able to manipulate the innerHTML and do that.
Yes, mserver tell us in fact which is your final aim, and we might find a resonable solution.
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 ?
Isn't it a server-side application better? maybe php...
Originally Posted by
mserver
Esti roman ?
Join Date: Dec 2003
Location: Bucharest, ROMANIA
Posts: 4,305
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
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);
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>
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
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...
Originally Posted by
mserver
... i can't use php, because the script will be inserted on html pages...
Then use SSI
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)
Posting Permissions
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
Forum Rules
Bookmarks