4

我有一个小书签,它通过“链接”标签(外部样式表)将 CSS 样式表插入目标 DOM。

最近,这仅在 Internet Explorer 中停止在 Amazon.com 上运行。它适用于其他网站和其他浏览器(甚至在 Amazon.com 上)。我们用来插入样式表的技术非常简单:

document.getElementsByTagName('head')[0].appendChild(s);

其中“s”是使用创建的链接对象document.createElement。即使在亚马逊上,我也可以通过 Internet Explorer 开发人员工具栏 DOM 检查器看到该元素存在。 但是,如果我在 JavaScript 中提醒document.styleSheets集合,它就不存在了。

作为测试,我尝试使用仅限 IE 的document.createStyleSheet方法将 URL 作为参数传递给我的样式表。这会引发错误:

没有足够的存储空间来完成此操作

兴趣点:

  • 的文档document.createStyleSheet说,如果页面上的样式表超过 31 个,则会引发错误,但是(1)这是一个不同的错误,(2)页面上只有 10 个外部样式表。
  • 我对错误的谷歌搜索出现了许多死胡同,唯一一个建议与样式表相关的是这个 drupal post,但它指的是内联样式的字符限制,而不是与外部样式有关的问题。
  • 相同的代码,即使是createStyleSheet调用,也适用于 IE 中的其他站点。

这对我来说已经达到了“完全神秘”的状态。

4

4 回答 4

4

我刚试过这个

javascript:(function(d) { d.createStyleSheet().cssText="* {color:blue !important;}"   })(document);

javascript:(function(d) { d.createStyleSheet("http://myschemas.com/pub/clear.css") })(document);

来自 amazon.com 上的 IE,两者都有效。也许您需要将 !important 添加到您的 css 的某些项目以确保它们现在生效?

更新:为您找到了可能的解决方案...

javascript:(function(c) {c[c.length-1].addImport("http://myschemas.com/pub/clear.css")})(document.styleSheets);

希望它可以帮助你。

于 2009-03-25T17:49:38.070 回答
2

寻找答案,我发现 31 样式表限制在以编程方式加载 CSS 时引发此异常:

http://www.telerik.com/community/forums/aspnet-ajax/general-discussions/not-enough-storage-is-available-to-complete-this-operation.aspx

最初的限制在知识库文档中进行了描述(假设只发生在 IE8 及以下版本,但反复报告为发生在 IE9 中):

http://support.microsoft.com/kb/262161

于 2012-11-26T16:57:45.357 回答
0

这就是我所做的一切,而且我从未见过它不起作用。

loadCss = function( name, url ) {

    var head = document.getElementsByTagName('head')[0];

    var link = document.createElement("link");

    link.setAttribute("type", "text/css");

    link.setAttribute("rel", "stylesheet");

    link.setAttribute("href", url);

    link.setAttribute("media", "screen");

    head.appendChild(link);
};
于 2009-03-25T19:35:22.170 回答
0

我正在使用 jQuery 做类似的事情,发现我必须按以下顺序进行操作:

var $link = $('<link>');
$('head').add($link);
$link.attr({
  type: 'text/css',
  // ... etc ...
  media: 'screen'
});

否则它在 IE 中不起作用(IE7,还没有看过 IE8)。

高温高压

于 2010-11-29T03:42:38.573 回答