在 IE8 中使用 JavaScript 将 CSS 附加到正文时出现未知运行时错误
Unknown Runtime Error when using JavaScript to append CSS to Body in IE8
我在 Internet Explorer 8 中将 CSS @import 规则插入我的 <body>
时遇到问题。我这样做是为了推迟非关键 CSS.
当我 运行 以下代码时,我在第 6 行 (ref_obj.innerHTML = ...
) 上得到一个 "Unknown Runtime Error":
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 上进行搜索后,我偶然发现了这个 post - Why is document.getElementById('tableId').innerHTML not working in IE8? - 它说 innerHTML
for STYLE
[和其他一些元素] 在 IE 上是只读的。
关于如何编辑我的代码以解决这些限制的任何想法?
注意:仅纯香草 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);
}
让 IE 满意的方法是在将节点插入 DOM:
后使用节点的 styleSheet.cssText
属性
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);
ref_obj.styleSheet.cssText = "@import url(\""+css_path_str+"\");";
我在 Internet Explorer 8 中将 CSS @import 规则插入我的 <body>
时遇到问题。我这样做是为了推迟非关键 CSS.
当我 运行 以下代码时,我在第 6 行 (ref_obj.innerHTML = ...
) 上得到一个 "Unknown Runtime Error":
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 上进行搜索后,我偶然发现了这个 post - Why is document.getElementById('tableId').innerHTML not working in IE8? - 它说 innerHTML
for STYLE
[和其他一些元素] 在 IE 上是只读的。
关于如何编辑我的代码以解决这些限制的任何想法?
注意:仅纯香草 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);
}
让 IE 满意的方法是在将节点插入 DOM:
后使用节点的styleSheet.cssText
属性
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);
ref_obj.styleSheet.cssText = "@import url(\""+css_path_str+"\");";