views:

31

answers:

2

I want to append a script tag which executes one line of JavaScript to the head of a document, rather than appending a script tag which is empty and uses the src attribute.

Here's what I've got so far:

<script type="text/javascript">
var scriptContents = 'alert("hi")';
var theScript = document.createElement('script');
theScript.type = 'text/javascript';
theScript.appendChild(scriptContents);
document.getElementsByTagName('head')[0].appendChild(theScript);
</script>

It's the appendChild(scriptContents) part that I'm having trouble with. How do I change this to get the alert to appear in the browser?

A: 

You need to append it as a text node. Try this:

theScript.appendChild(document.createTextNode(scriptContents));
casablanca
+2  A: 

You can't do

theScript.appendChild(scriptContents);

as appendChild() only appends nodes, it can't append text. You need to make a text node with:

var scriptContents=document.createTextNode('alert("hi");')

However, as Jake mentioned above, you probably just want to do:

eval('alert("hi")');
lucideer