使用document.styleSheets

时间:2015-06-02 12:59:43

标签: javascript css

我正在检查document.styleSheets以查找文件是否已加载。我在做,

for (var i = 0, iLen = document.styleSheets.length; i < iLen; i++) {
    var sheet = document.styleSheets[i];
    if (!sheet.href) {
        continue;
    }
    if (sheet.href.indexOf('mypath') > -1 && sheet.rules.length > 0) {
        // do something
    }
}

但它不起作用。有办法吗?

1 个答案:

答案 0 :(得分:1)

我尝试了你的代码,它适用于我,(在chrome上,内部css),但是当使用从CDN加载的外部css时失败,所以我猜你的问题是@PatrickEvans提到的“规则”属性。

如果找不到任何其他好的方法,那么您可以在页面中添加一个不影响页面显示的元素,但可以检查是否有更改。

例如添加这样的特定css规则。

html body div#my_stylesheet_name {
    width: 112px !important;//random width that is unlikely overwritten by another css
}
<div id="my_stylesheet_name" style="height:0; width: 0;display: none;"></div>

//then use javascript timer/interval to check if 
element with id of "my_stylesheet_name" has width of 112, if so, then it means css has loaded.

编辑 - 如果您没有任何其他选项,您可能会考虑这样的事情(我之前没有使用它,因此在使用之前测试浏览器兼容性)

1)使用JS

创建元素

2)添加错误和onload事件,并使用它们来做你的魔法

    var link;
    link = document.createElement("link");
    link.setAttribute("type", "text/css");
    link.onload=function( evt ) {
        console.log("LINK LOADED", evt );
    };
    link.onerror=function( evt  ) {
        console.log("LINK Error", evt );
    };
    link.setAttribute("rel", "stylesheet");
    link.setAttribute("href", "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css");
    document.getElementsByTagName("head")[0].appendChild(link);