我想在我的网页上的元标记后立即添加一个CSS链接。到目前为止,我有以下代码:
var el_head = document.getElementsByTagName('head')[0];
var css_path_str = 'http://fakedomain.com/my.css';
var ref_obj = document.createElement("link");
ref_obj.rel = "stylesheet";
ref_obj.type = "text/css";
ref_obj.media = "all";
ref_obj.href = css_path_str;
var el_head_meta = el_head.getElementsByTagName('meta');
if(el_head_meta && el_head_meta.length > 0)
{
var el_collection_count_int = el_head_meta.length-1;
var el_meta_last_obj = el_head_meta[el_collection_count_int];
var elem_parent_dest_obj = el_meta_last_obj.parentNode;
elem_parent_dest_obj.insertBefore(ref_obj, el_meta_last_obj.nextSibling);
}
它在现代浏览器上完美运行,但它不适用于IE8(惊喜,惊喜!)。
当我在IE8上运行上面的代码时,浏览器似乎“加载”了20或30秒,然后它什么也没做。
我有什么想法可以让它发挥作用吗?
注意:在Modern.IE的Windows 7虚拟机上使用IE8
修改
在摆弄这个之后,我发现该脚本确实有效。我似乎遇到了IE8的问题,它不是理想的开发人员工具。每当您第一次加载页面时,它会显示CSS被添加到正确的位置。但是,当你刷新页面时,你再也看不到任何东西了(我甚至不敢猜测为什么会这样)。幸运的是,确实加载了CSS文件(正如我在加载的文件中放入的一些示例声明所验证的那样)。我发现处理这个问题的唯一方法是去地址栏然后按回车;执行此操作时,您会在DOM检查器中看到添加的链接引用。所以,我想每当我在IE8上进行任何测试时,我都会这样做。
答案 0 :(得分:0)
检查它是否是IE浏览器
var ua = window.navigator.userAgent;
var msie = ua.indexOf("MSIE "); if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // If Internet Explorer, return version number
alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
InsertLinkTag();
return false;
}
并在IE中使用此工作。并附加你的风格。
function InsertLinkTag() {
var css = '** your complete CSS style**', head = document.head || document.getElementsByTagName('head')[0], style = document.createElement('style');
style.type ='text/css';if(style.styleSheet){ style.styleSheet.cssText = css;
}else{
style.appendChild(document.createTextNode(css));
} head.appendChild(style);
}