var head =document.getElementsByTagName("head")[0];  
            newScript = document.createElement('script');
        newScript.type = 'text/javascript';
        newScript.innerHTML = '$(window).load(function(){ someFooo(); }); ';
        head.appendChild(newScript);

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

1
Dourian 29 Окт 2009 в 17:07
1
Может ли кто-нибудь сказать мне, что такое IE6? Я смутно припоминаю, что кто-то пользовался им лет пять назад, но я не уверен.
 – 
Josh Stodola
29 Окт 2009 в 17:50

2 ответа

Вместо этого попробуйте свойство text. :

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

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

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

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

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

3
Crescent Fresh 29 Окт 2009 в 17:53

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

(...) Это также может быть немного сложно, потому что вы не можете использовать innerHTML для прямой инъекции в элемент HEAD или 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);
1
GmonC 29 Окт 2009 в 17:47