Использование appendChild с IE в Javascript - PullRequest
9 голосов
/ 17 августа 2011

У меня проблемы с этим кодом в IE (с Chrome он работает нормально):

<html>
<body>
<script type="text/javascript">
    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);
</script>
</body>
</html>

Ошибка, которую я получаю в Internet Explorer (IE9): «неожиданный вызов метода или доступ к свойству» в операторе «_js.appendChild (textNode)».

Есть ли способ обойти эту проблему?

Ответы [ 2 ]

5 голосов
/ 17 августа 2011

Как видите здесь appendChild() в IE не применяется к <script> -элементам. (Похоже, что IE9 поддерживает его, но это зависит от режима браузера)

Ранее Nivas был правильный ответ, к сожалению, он был удален. В IE используйте

_js.text = scriptContent; 
3 голосов
/ 17 августа 2011

Ваш сценарий выполняется до того, как 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;
}
...