首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态加载CSS

动态加载CSS
EN

Stack Overflow用户
提问于 2010-09-19 10:08:08
回答 1查看 8.7K关注 0票数 19

我正在尝试为我的网站创建一个页面主题函数。我想在页面上使用单独的CSS文件动态加载相应的主题。

我使用的是以下代码:

代码语言:javascript
复制
  fileref.setAttribute("rel", "stylesheet")
  fileref.setAttribute("type", "text/css")
  fileref.setAttribute("href", 'link.css')

  document.getElementsByTagName("head")[0].appendChild(fileref)

它工作得很好,但它不会返回任何信息,无论CSS文件是否已加载。

有没有一种方法可以在加载.css时捕获?也许可以使用ajax?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-19 11:25:25

当加载CSS文件(或其readyState中的任何其他更改)时,Internet Explorer将触发onReadyStateChange事件。其他浏览器不会触发任何事件,因此您必须手动检查样式表是否已加载,这很容易通过以固定的时间间隔检查document.styleSheets对象来实现。

示例

代码语言:javascript
复制
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);    
}

它很难看,但它可以在所有浏览器中工作。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3744270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档