2011-04-09 60 views
6

我用下面的JavaScript动态加载样式表是否:如何确定一个链接资源成功加载

function set_stylesheet(name) { 
    var link = document.getElementById('userstylelink'); 
    link.href = link.href.replace(/[^\/]+\.css$/, name + '.css'); 
} 

有什么方法来确定新的CSS文件是否加载成功?如果失败,我希望能够应用默认样式表。

+0

这可能是一种方法:使用AJAX获取文件后检查响应代码。 – pimvdb 2011-04-09 20:59:45

回答

0

我建议通过ajax加载,检查用户pimvbd提到的响应,还可以在样式表的末尾放置一个虚拟规则,用可检查的声明来设置隐藏元素的样式。例如,给一个隐藏的div边框:987px,并检查隐藏的div的边框是否实际上是987px。是的,它引入了对该风格和该元素的依赖关系。我已经与很多人进行过无休止的讨论,而且还没有更好的方法。希望弄点儿关注在不久的将来的浏览器版本...

1

最简单的方法是在分配新的href后检查link元素的styleSheet.cssText属性。

function set_stylesheet(name) { 
    var link = document.getElementById('userstylelink');  
    link.href = link.href.replace(/[^\/]+\.css$/, name + '.css'); 
    if (link.styleSheet.cssText) { 
    //if not empty string, it was loaded 
    } 
    else { 
    link.href = "default.css"; 
    } 

或者,有一个“onerror”事件,当资源在href分配后未能加载时触发。

0

有一种解决方案不需要javascript或检测样式表是否加载。

看来你也可以将默认样式应用于内置样式表,然后让动态加载样式表覆盖默认值。如果新的样式表没有加载,默认情况下已经加载并且没有进一步的工作。如果新的样式表加载,它会覆盖默认值并显示新的样式。