我有以下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);”上窒息 给出错误:“意外调用方法或属性访问”
发生了什么事?
答案 0 :(得分:14)
尝试改为:
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);
答案 1 :(得分:0)
这特别是“style”元素,IE不允许使用appendChild()方法。
答案 2 :(得分:0)
I.E中 HTMLStyleElement 不允许使用appendChild()。
答案 3 :(得分:0)
我尝试了你的建议,而且样式块的内容根本就不会被填充。在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;
}
}
});
}
});
}
有什么想法吗?