动态加载 css 样式表在 IE 上不起作用

Posted

技术标签:

【中文标题】动态加载 css 样式表在 IE 上不起作用【英文标题】:Dynamically loading css stylesheet doesn't work on IE 【发布时间】:2010-11-14 04:07:33 【问题描述】:

我像这样动态加载一个 css 样式表(在 jQuery 的帮助下):

var head = document.getElementsByTagName('head')[0];
$(document.createElement('link'))
    .attr( type: 'text/css', href: '../../mz/mz.css', rel: 'stylesheet' )
    .appendTo(head);

这在 Firefox 和 Google Chrome 中运行良好,但在 IE 中

有什么帮助吗? 谢谢

【问题讨论】:

***.com/questions/524696/… 的副本 【参考方案1】:

您需要最后设置 href attr 并且仅在将链接 elem 附加到头部之后:

$('<link>')
  .appendTo('head')
  .attr(type : 'text/css', rel : 'stylesheet')
  .attr('href', '/css/your_css_file.css');

更新

现在 IE 和 Edge 的唯一目的是下载 Chrome,所以我建议不要使用对 IE 或 Edge 的自定义支持来膨胀你的代码,而只是忽略它们的存在。

【讨论】:

这是一个需要注意的重要 Internet Explorer 怪癖(即使在最近的 IE 8 中也是如此),并且对我正在从事的项目绝对至关重要。感谢您在这里注意到它。人们什么时候会停止使用 IE? 我更喜欢这个,而不是 IE-only 'document.createStyleSheet' 方法。 这在 IE8 兼容模式下的 IE9 上对我有用,但在纯/真正的 IE8 上失败了。在真正的 IE8 上,只有 'document.createStyleSheet' 方法对我来说是可靠的。只是为了让其他人知道遇到同样问题的人。 为了在来自modern.ie的实际IE8 win7 VM上工作,我必须在属性名称中加上引号:'type'和'rel'... 在 IE9 中对此进行了测试,它解决了我遇到的样式表注入问题!真的很感激!【参考方案2】:

在不打开调试器的情况下打开 ie8。当您到达动态样式表之后...打开调试器并瞧,它们应该在那里。

【讨论】:

【参考方案3】:

好像

$('<link rel="stylesheet" type="text/css" href="' + url + '" />').appendTo('head'); 

只要 url 是包含协议的完全限定 URI,也可以在 IE 中使用...

【讨论】:

【参考方案4】:

这也可能与它有关 - 取自Microsoft Support article:

在 Microsoft Internet Explorer 版本中加载页面时,网页上的样式丢失或看起来不正确 ...

...出现此问题的原因是 以下条件为真 互联网浏览器:

所有样式标签 前 31 个样式标签后没有 应用。

后面的所有样式规则 前 4,095 条规则未应用。

开启 使用@import 规则的页面 不断导入外部风格 导入其他样式表的工作表, 超过三个的样式表 深层次被忽略。

【讨论】:

【参考方案5】:

这似乎也适用于 IE:

var link = document.createElement('link'); link.rel = '样式表'; link.type = '文本/css'; link.href = '/includes/style.css'; document.getElementsByTagName('head')[0].appendChild(link);

【讨论】:

【参考方案6】:

一旦 IE 处理了页面加载的所有样式,添加另一个样式表的唯一可靠方法是使用 document.createStyleSheet(url)

有关更多详细信息,请参阅 createStyleSheet 上的 MSDN article。

url = 'style.css';
if (document.createStyleSheet)

    document.createStyleSheet(url);

else

    $('<link rel="stylesheet" type="text/css" href="' + url + '" />').appendTo('head'); 

【讨论】:

document.createStyleSheet 的文档:ssicom.org/js/x276572.htm(MSDN 文章因 503 错误而失败...)。请注意,返回的对象是 DisphtmlStyleSheet 对象,而不是 LINK 元素。要从此对象获取链接标签,您需要访问 document.createStyleSheet('...').owningElement 我相信动态创建新样式标签&lt;style&gt;your style here&lt;/style&gt;并将其添加到中也适用于IE。 更新 09/2013:不再支持 createStyleSheet 方法。欲了解更多信息,请访问:msdn.microsoft.com/en-us/library/ie/ms531194%28v=vs.85%29.aspx 我下面的解决方案不同意, 我在下面尝试了@ekerner 的解决方案,但这是唯一适用于 IE9(模拟模式)的解决方案。

以上是关于动态加载 css 样式表在 IE 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Less Css 在 IE8 和 IE7 上不起作用

为啥 LESS css 在 localhost 上不起作用

javascript 动态样式添加

关键帧在 IE 上不起作用

Firebase 动态链接在 iOS 上不起作用

CSS 样式在本地 xampp 服务器中不起作用