【发布时间】:2015-07-05 23:49:30
【问题描述】:
我在 Internet Explorer 8 中将 CSS @import 规则插入我的 <body> 时遇到问题。我这样做是为了推迟非关键 CSS。
当我运行以下代码时,我在第 6 行 (ref_obj.innerHTML = ...) 收到“未知运行时错误”:
var css_path_str = "my.css",
el_body = document.getElementsByTagName('body')[0],
ref_obj = document.createElement("style");
ref_obj.type = "text/css";
ref_obj.innerHTML = "@import url(\""+css_path_1_str+"\");";
el_body.appendChild(ref_obj);
您可能已经猜到,该代码在 Chrome 和 Firefox 上运行没有任何问题。
在 SO 上进行搜索后,我偶然发现了这篇文章 - Why is document.getElementById('tableId').innerHTML not working in IE8? - 它说 IE 上的 innerHTML for STYLE [和其他一些元素] 是只读的。
有什么想法可以编辑我的代码来解决这些限制吗?
注意:仅限纯原生 JavaScript。
编辑:
问题已解决,但为了完整起见,这里是应该工作的代码(跨浏览器)。
var css_path_str = "my.css",
el_body = document.getElementsByTagName('body')[0],
ref_obj = document.createElement("style");
ref_obj.type = "text/css";
el_body.appendChild(ref_obj);
if(ref_obj.styleSheet)
{
//IE
ref_obj.styleSheet.cssText = "@import url(\""+css_path_str+"\");";
}
else
{
//Other Browsers
var ref_obj_text_node_obj = document.createTextNode("@import url(\""+css_path_str+"\");");
ref_obj.appendChild(ref_obj_text_node_obj);
}
【问题讨论】:
-
我认为可以用
innerText设置<style>元素的内容;有一些像这样的仅限 IE 的属性。 -
您是否尝试过使用
link(href链接属性)而不是style? (添加到head) -
innerHTML标签没有innerHTML属性。您可以创建一个 textNode 并附加到它。 -
@marekful ... 除了
innerHTML可以在其他浏览器中使用。 -
@GabyakaG.Petrioli 啊好吧,我明白你的意思了。是的,这可能有效(尽管我们在这里谈论的是 IE8,所以谁知道)。
标签: javascript internet-explorer-8