我正在尝试为我的网站创建一个页面主题功能。我想使用单独的CSS文件在页面上动态加载相应的主题。
我正在使用此代码:
fileref.setAttribute("rel", "stylesheet")
fileref.setAttribute("type", "text/css")
fileref.setAttribute("href", 'link.css')
document.getElementsByTagName("head")[0].appendChild(fileref)
哪个工作正常,但如果CSS文件已加载,它不会返回任何信息。
加载.css
时是否有办法捕获?也许通过使用ajax?
答案 0 :(得分:20)
当加载CSS文件时(或onReadyStateChange
中的任何其他更改),Internet Explorer将触发readyState
事件。
其他浏览器不会触发任何事件,因此您必须手动检查是否已加载样式表,这可以通过以固定间隔检查document.styleSheets
对象来轻松实现。
示例强>
window.onload = function (){
var filename = "link.css",sheet,i;
var fileref = document.createElement("link");
fileref.setAttribute("rel", "stylesheet");
fileref.setAttribute("type", "text/css");
fileref.setAttribute("href", filename);
readyfunc = function () {
alert("File Loaded");
}
timerfunc = function (){
for (i=0;i<document.styleSheets.length;i++){
sheet = document.styleSheets[i].href;
if(sheet !== null && sheet.substr(sheet.length-filename.length) == filename)
return readyfunc();
}
setTimeout(timerfunc,50);
}
if (document.all){ //Uses onreadystatechange for Internet Explorer
fileref.attachEvent('onreadystatechange',function() {
if(fileref.readyState == 'complete' || fileref.readyState == 'loaded')
readyfunc();
});
} else { //Checks if the stylesheet has been loaded every 50 ms for others
setTimeout(timerfunc,50);
}
document.getElementsByTagName("head")[0].appendChild(fileref);
}
这很难看,但它适用于所有浏览器。