【发布时间】:2011-04-27 22:57:53
【问题描述】:
我在 jQuery 中运行以下代码来动态加载样式表。其目的是允许用户加载自定义样式表并更改 JavaScript 小部件的外观:
this.loadStyleSheet = function(url){
$("<link rel='stylesheet' type='text/css' />").attr("href", url).appendTo("head");
}
屏幕瞬间出现跳动,因为只有在加载动态样式表后才会将正确的样式应用于小部件。为了解决这个问题,我需要知道动态样式表实际上是什么时候完成加载的。
虽然这个问题has been discussed before,但没有一个解决方案适用于我的情况:
- .load() 仅在 IE 中触发,而不在 Firefox 中触发。需要跨浏览器解决方案。顺便说一句,.ready() 在样式表完成加载之前触发。
- .get() 仅适用于同一域。在我的例子中,样式表可能来自任何给定的域。
- 无法通过 setTimeout 查询要更改的某些 CSS 属性。用户可能指向任何自定义样式表,但无法知道她的 CSS 文件将包含什么。
- 通过 setTimeout 加载样式表后等待一段时间显然是一个糟糕的解决方案。没有办法提前知道样式表需要多长时间才能加载,如果它会加载的话。
关于这个问题有什么新想法吗?非常感谢您的帮助。
【问题讨论】:
-
现在我找到了一个有点脏的解决方案 - 将动态 CSS 负载移到 $(document).ready 之外,将其余代码留在 $(document).ready 中。因此,其余代码仅在加载动态 CSS 后执行。不过,我很想知道是否有其他解决方案。
-
我并不是真的推荐这个,但如果你永远找不到答案.. 你仍然可以使用 .get() 方法。只需让它将样式表 URL 传递给您域上的 php 脚本,该脚本会获取 CSS 并返回它。
标签: javascript jquery css firefox javascript-events