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

IT技术 javascript jquery html css internet-explorer
2021-01-26 23:44:53

我像这样动态加载一个 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 中不起作用

有什么帮助吗?谢谢

6个回答

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

有关更多详细信息,请参阅有关 createStyleSheetMSDN 文章

url = 'style.css';
if (document.createStyleSheet)
{
    document.createStyleSheet(url);
}
else
{
    $('<link rel="stylesheet" type="text/css" href="' + url + '" />').appendTo('head'); 
}
2013 年 9 月更新:不再支持 createStyleSheet 方法。有关详细信息,请访问:msdn.microsoft.com/en-us/library/ie/ms531194%28v=vs.85%29.aspx
2021-03-23 23:44:53
我下面的解决方案不同意,
2021-03-23 23:44:53
我相信动态创建一个新的样式标签 <style>your style here</style>并将其添加到 <head> 也适用于 IE。
2021-03-24 23:44:53
我在下面尝试了@ekerner 的解决方案,但这是唯一适用于 IE9(模拟模式)的解决方案。
2021-03-29 23:44:53
document.createStyleSheet 的文档:ssicom.org/js/x276572.htm(MSDN 文章因 503 错误而失败...)。请注意,返回的对象是 DispHtmlStyleSheet 对象,而不是 LINK 元素。要从此对象获取链接标签,您需要访问 document.createStyleSheet('...').owningElement
2021-04-06 23:44:53

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

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

更新

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

在 IE9 中对此进行了测试,它解决了我遇到的样式表注入问题!真的很感激!
2021-03-14 23:44:53
我比仅 IE 的“document.createStyleSheet”方法更喜欢这个方法。
2021-03-19 23:44:53
这是一个需要注意的重要 Internet Explorer 怪癖(即使是最近的 IE 8),并且对于我正在从事的项目绝对至关重要。感谢您在这里注意到它。人们什么时候会停止使用 IE?
2021-03-24 23:44:53
为了让它在我的现代 IE8 win7 VM 上运行,我不得不在属性名称上加上引号:'type' 和 'rel'...
2021-03-27 23:44:53
这在 IE8 兼容模式下的 IE9 上确实对我有用,但在纯/真实 IE8 上失败。在真正的 IE8 上,只有 'document.createStyleSheet' 方法对我来说是可靠的。只是为了让其他人知道遇到同样问题的人。
2021-04-04 23:44:53

这似乎也适用于 IE:

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

这也可能与它有关 - 取自Microsoft 支持文章

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

...发生此问题的原因是 Internet Explorer 中满足以下条件:

  • 不应用前 31 个样式标签之后的所有样式标签。

  • 不应用前 4,095 条规则之后的所有样式规则。

  • 在使用@import 规则连续导入导入其他样式表的外部样式表的页面上,深度超过三层的样式表将被忽略。

看起来

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

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