Ваш сценарий выполняется до того, как DOM будет готов, поэтому получение тега <body>
является условием гонки. Я действительно получаю ту же ошибку в Chrome 15 и Firefox 8.
Вы можете увидеть код , работающий при вызове после загрузки страницы, например, в функции
HTML
<a href="#" onclick="return append()">append</a>
JavaScript
function append() {
var scriptContent = "var whatever=1";
var _js = document.createElement('script');
_js.setAttribute('type', 'text/javascript');
textNode = document.createTextNode(scriptContent);
_js.appendChild(textNode);
document.getElementsByTagName('body')[0].appendChild(_js);
return false;
}