Как вставить JavaScript с помощью innerHTML (ie6 дает мне неизвестную ошибку во время выполнения) - PullRequest
1 голос
/ 29 октября 2009
    var head =document.getElementsByTagName("head")[0];  
            newScript = document.createElement('script');
        newScript.type = 'text/javascript';
        newScript.innerHTML = '$(window).load(function(){ someFooo(); }); ';
        head.appendChild(newScript);

Это вызывает неизвестную ошибку времени выполнения в IE6. Есть ли другой способ обойти это?

Ответы [ 2 ]

3 голосов
/ 29 октября 2009

Попробуйте text свойство вместо:

newScript.text = '$(window).load(function(){ someFooo(); });';

Это работает и в браузерах не IE. Я использовал это в FF2, FF3, FF3.5, Safari 4 (победа), Opera 9+, Chrome 2, Chrome 3, и все они работают.

Согласно спецификации (я должен сказать это иначе, я чувствую себя обманчиво), вы должны использовать appendChild:

var script = '$(window).load(function(){ someFooo(); });';
newScript.appendChild(document.createTextNode(script));

Но это не работает в IE (элементам <script> не разрешено иметь детей или что-то еще в IE). Так что просто иди с первым.

1 голос
/ 29 октября 2009

Похоже, это проблема использования innerHTML в элементе только для чтения. Это также происходит, когда вы пытаетесь установить innerHTML в tbody. Согласно документации msdn :

(...) Это также может быть немного сложно, потому что вы не можете использовать innerHTML, чтобы ввести в ГОЛОВУ или Элемент STYLE напрямую. (Обе эти теги только для чтения.) Лучший способ динамически добавлять стили на страницу, чтобы дождитесь загрузки документа и затем создайте правило в новом стиле лист.

Почему это атрибут только для чтения? Вот объяснение .

Итак, вам нужно использовать подход DOM для выполнения этой динамической загрузки. Проверьте эту ссылку для загрузки внешних ресурсов JavaScript и эту для встроенных сценариев, что в вашем случае.

    newScript = document.createElement('script');
    newScript.type = 'text/javascript';
    var head = document.getElementsByTagName("head")[0];  
    var src = '$(window).load(function(){ someFooo(); }); ';
    newScript.text = src;
    head.appendChild(newScript);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...