我想使用jQuery异步加载文档的CSS。
我找到了这个示例,但这似乎在IE中不起作用:
<script type="text/javascript" src="/inc/body/jquery/js/jquery-1.4.4.min.js"></script>
<script type="text/javascript">
$(function(){
$('<link>', {
rel: 'stylesheet',
type: 'text/css',
href: '/inc/body/jquery/css/start/jquery-ui-1.8.10.custom.css'
}).appendTo('head');
$.getScript("/inc/body/jquery/js/jquery-ui-1.8.10.custom.min.js", function(){
});
});
</script>
基本上我想加载jQuery UI
后,所有其他数据,图像,样式等加载到页面。$.getScript
非常适合JS文件。唯一的问题是IE中的CSS。
你知道更好的解决办法吗?
9条答案
按热度按时间qltillow1#
这里有一个异步样式表加载的方法,不会阻止页面呈现,对我来说很有效:
https://github.com/filamentgroup/loadCSS/blob/master/loadCSS.js
基于lonesomeday的答案,上面链接的代码的简化示例
ybzsozfc2#
安全的方法是老方法...
5t7ly7z53#
在IE中应该这样做:
iyzzxitl4#
正如在JavaScript文档中提到的,棘手的部分在于加载CSS:
但是在知道CSS何时/是否已经成功加载时,就像你的用例“我想在所有其他数据,图像,样式等加载之后加载jQuery UI**”一样。
理想情况下,JavaScript可以加载CSS文件作为依赖项。但是,当CSS文件被加载时,特别是在Gecko/Firefox中,当文件从另一个域加载时,会出现问题。一些历史可以在这个Dojo门票中找到。
知道文件何时加载是很重要的,因为您可能只想在样式表加载后获取DOM元素的维度。
有些人已经实现了一种方法,他们寻找一个众所周知的样式应用于特定的HTML元素,以了解是否加载了样式表。由于该解决方案的特殊性,它并不适合使用WIREJS。知道link元素何时加载了引用的文件是最可靠的解决方案。
由于知道文件何时加载并不可靠,因此在JavaScript加载中显式支持CSS文件没有意义,因为它会导致由于浏览器行为而导致的错误报告。
8oomwypt5#
根据Dynamically loading css stylesheet doesn't work on IE:
你需要最后设置href属性,并且只有在链接元素被附加到头部之后。
5lhxktic6#
pgccezyw7#
7rtdyuoh8#
这里没有一个解决方案在加载CSS文件时不阻塞页面呈现--这通常是“异步”的意思。(如果浏览器正在等待某个东西并阻止用户与页面交互,那么这种情况就定义为同步。)
同步和异步加载的例子可以在这里找到:
http://ajh.us/async-css
我发现使用
setTimeout
延迟加载似乎有所帮助。8ljdwjyq9#
另一个几乎没有内联JavaScript的选项:
浏览器将不阻塞地加载文件,然后在
load
上将其切换到正确的rel=stylesheet
,这将解释CSS文件。