3

我拼凑了一个来自不同来源的脚本,这有助于我在样式表无法加载时设置一些备用方案(特别是对我而言,Pictos 服务器并不总是可靠的)。

这很好用,但由于某种原因在 Firefox 上失败,它不处理 if 语句中的任何内容。我已经尝试通过 JSHint 运行它,但没有出现任何严重的问题。

有任何想法吗?

$(document).ready(function(){
    $.each(document.styleSheets, function(i,sheet){
      if(sheet.href==='http://get.pictos.cc/fonts/357/9') {
        var rules = sheet.rules ? sheet.rules : sheet.cssRules; // Assign the stylesheet rules to a variable for testing

        $('body').addClass('pictos-working');
        $('.pictos-fallback').hide(); // Hide fallbacks

        // If the stylesheet fails to load...
        if (rules.length === 0) {
            $('.pictos').hide(); // Hide Pictos tags so we don't get random letters
            $('body').removeClass('pictos-working'); // Remove 'working' class
            $('.pictos-fallback').show(); // Show fallbacks
        }
     }
    });
});​
4

2 回答 2

5

您的样式表检测方法不可靠。cssRulesnull当样式表来自不同的域时,因为相同的来源策略

不是通过对象检测 css 规则的存在,而是cssRules检查是否应用了样式表中的规则:

if ($('selector').css('property') === 'expectedvalue') {
    // Loaded
} else {
    // Not loaded.
}
于 2012-07-01T14:40:58.537 回答
0

只是一些可能有帮助的改进建议:

为什么嵌套if?由于您只有两种情况,请使用 if then else .. 当文件未加载时,您确定 cssRules 为零吗?也许有一些标题或元数据加载..你在哪里找到这个属性?

我刚刚发现的东西:http ://www.quirksmode.org/dom/w3c_css.html

于 2012-07-01T14:45:18.643 回答