У меня есть следующий javascript:
css = document.createElement('style');
css.setAttribute('type', 'text/css');
css_data = document.createTextNode('');
css.appendChild(css_data);
document.getElementsByTagName("head")[0].appendChild(css);
по какой-то причине только в IE он давится "css.appendChild (css_data);" Выдает ошибку: «Неожиданный вызов метода или доступа к свойству»
Что происходит?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вместо этого попробуйте:
var css = document.createElement('style');
css.setAttribute('type', 'text/css');
var cssText = '';
if (css.styleSheet) { // IE does it this way
css.styleSheet.cssText = cssText
} else { // everyone else does it this way
css.appendChild(document.createTextNode(cssText));
}
document.getElementsByTagName("head")[0].appendChild(css);
Это особенно характерно для элемента "style", IE не позволяет использовать для него метод appendChild ().
не разрешено appendChild () с HTMLStyleElement в I.E.
Я попробовал ваше предложение, и содержимое блока стилей просто никогда не заполняется. Пробовал в IE6 и IE7 ... похоже, не работает что-нибудь
Вот мой измененный код:
function load_content()
{
var d = new Date();
css = document.createElement('style');
css.setAttribute('type', 'text/css');
if (css.styleSheet) { css.styleSheet.cssText = 'testing'} //Because IE is evil
else { css_data = document.createTextNode(''); css.appendChild(css_data); } //And everyone else is cool
document.getElementsByTagName("head")[0].appendChild(css);
new Ajax.PeriodicalUpdater('content', '/%doc_path%?'+d.getTime(),
{
method: 'post',
frequency: 5,
onSuccess: function(transport) {
new Ajax.Request('/%css_path%?'+d.getTime(), {
method: 'get',
onSuccess: function(transport) {
if (css.styleSheet) { css.styleSheet.cssText = transport.responseTex}
else {
var new_css_data = document.createTextNode(transport.responseText);
css.replaceChild(new_css_data, css_data);
css_data = new_css_data;
}
}
});
}
});
}
Любые идеи?
Две вещи: 1) Как вы проверяете, что блок стиля не получает контент? Панель инструментов разработчика IE или что-то в этом роде? 2) Вместо «тестирования» попробуйте body {font-size: 45px; } '(попробуйте законный CSS).
У меня есть букмарклет, который покажет вам источник документа в памяти, а не источник файла ... не уверен, что вы имеете в виду для # 2
css.styleSheet.cssText = 'тело {размер шрифта: 45 пикселей; } ';
Показывает ли букмарклет CSS внутри других тегов <style> на странице?
да ... букмарклет показывает CSS внутри тегов стиля. он также показывает это в этом конкретном теге в других браузерах.
Две вещи: 1) Что за букмарклет? 2) Вы пробовали css.styleSheet.cssText = 'body {font-size: 45px; } ';? Это должно дать вам визуальное представление о том, работает ли он.
Букмарклет здесь: adamhaile.com/projects/bookmarklets Я пробовал, ваше другое предложение, и оно привело меня к моему окончательному решению, которое на самом деле было проблемой из-за того, что другой раздел кода возился с этим. Спасибо за помощь.
привет, то же самое относится и к элементам скрипта? У меня аналогичная проблема, но с элементом скрипта, когда я хочу динамически загружать код javascript ...