javascript - 在 Firefox 中添加动态样式表时可以触发 jQuery load 事件吗?

标签 javascript jquery css firefox jquery-events

我正在 jQuery 中运行以下代码来动态加载样式表。其目的是允许用户加载自定义样式表并更改 JavaScript 小部件的外观:

this.loadStyleSheet = function(url){
    $("<link rel='stylesheet' type='text/css' />").attr("href", url).appendTo("head");
}

屏幕瞬间出现跳动,因为只有在加载动态样式表后才会将正确的样式应用于小部件。为了解决这个问题,我需要知道动态样式表实际上何时完成加载。

虽然这个问题has been discussed before ,这些解决方案都不适用于我的情况:

  1. .load() 仅在 IE 中触发,在 Firefox 中无效。需要跨浏览器解决方案。顺便说一句,.ready() 在样式表完成加载之前触发。
  2. .get() 仅适用于同一域。我的例子中的样式表可能来自任何给定的域。
  3. 无法通过 setTimeout 查询要更改的某些 CSS 属性。用户可以指向任何自定义样式表,并且无法知道她的 CSS 文件将包含什么内容。
  4. 通过 setTimeout 加载样式表后等待恒定时间显然是一个糟糕的解决方案。无法提前知道样式表加载需要多长时间(如果会加载的话)。

关于这个问题有什么新的想法吗?非常感谢您的帮助。

最佳答案

如果其他人需要答案,请扩展我上面的评论:

你的 JavaScript 看起来像这样:

var style = $('<style type="text/css">');
$(document).append(style);
style.load('/fetchstyle.php', { url: "http://somesite.com/style.css" }, function() {
    // The styles are loaded
});

fetchstyle.php 脚本如下所示:

<?php
echo file_get_contents($_GET['url']);

未经测试,但这个概念应该可行。

关于javascript - 在 Firefox 中添加动态样式表时可以触发 jQuery load 事件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3976601/

相关文章:

html - 如何使用 html 和 css 创建一个小彩盒?

javascript - 远程数据源在 Jquery Mobile 自动完成中如何工作?

jquery - 使用 className 来定义 Canvas 对象而不是 ID..?

javascript - jquery如何让一个元素在动画结束后回到初始位置

jQuery .parent() 选择多个级别

css - 默认打开切换

html - 输入类型文本中的背景文本

javascript - JQuery Mobile CSS 文本输入

javascript - 使用 Twig 动态渲染 javascript 是否安全?

javascript - 过滤后的 HTML 列表 : making li elements initially invisible