【问题标题】:preventing page CSS from affecting Chrome extension CSS防止页面 CSS 影响 Chrome 扩展 CSS
【发布时间】:2012-10-18 04:48:30
【问题描述】:

我有一个 Chrome 扩展程序,它在每个页面中注入一个 DIV,并使用扩展程序中包含的样式表为该 DIV 设置样式。在某些页面上,注入的 DIV 看起来符合预期,但在其他页面上却并非如此。例如,在 StackOverflow 站点之一,我的元素的 box-shadow 属性被覆盖,尽管它在我的 CSS 中被指定为 ! important

当我检查有问题的元素时,Chrome 告诉我 box-shadow 属性未应用(显示为删除线),但它没有告诉我原因:样式级联中没有任何内容指定该属性。

当我将 box-shadow 属性直接添加到元素时(没有 CSS 类的好处),CSS 检查器视图显示属性与元素相关联,但效果仍然不存在。

已更新:代码 sn-ps:

这是我在代码中指定的内容:

    var $bar = $('<div>').addClass('pp_bar').css({
        'box-shadow': '-1px 0px 2px 1px #444',
        '-moz-box-shadow': '-1px 0px 2px 1px #444',
        '-webkit-box-shadow': '-1px 0px 2px 1px #444'
    });

这是 CSS:

.pp_bar {
    height: 80%;
    right: -4px;
    top: 0px;
    position: absolute;
    box-shadow: -1px 0px 2px 1px #444 ! important;
    -webkit-box-shadow: -1px 1px 2px 1px #444 ! important;
    -moz-box-shadow: -1px 1px 2px 1px #444 ! important;
}

这是 Chrome 显示的计算样式:

-webkit-box-shadow: #444 0px 0px 1.2000000476837158px 0px;
    element.style - rgb(68, 68, 68) -1px 0px 2px 1px
    .pp_bar - rgb(68, 68, 68) -1px 1px 2px 1px user stylesheet

您可以看到使用的值(#444 0px 0px 1.2000000476837158px 0px)与元素样式不同(在我的代码中分配;元素样式覆盖类值(它们是相同的)。没有元素样式设置,类值被删除。

在正常工作的网站上,浏览器会以计算的样式报告以下内容:

-webkit-box-shadow: #444 -1px 1px 2px 1px;
    element.style - rgb(68, 68, 68) -1px 0px 2px 1px
    .pp_bar - rgb(68, 68, 68) -1px 1px 2px 1px user stylesheet

接下来我应该尝试什么?

【问题讨论】:

  • 我开始看到类似的东西,但对我来说,样式表甚至没有加载,而且只在某些网站上。你能判断你的 div 是否应用了用户样式表吗?查看计算样式下的样式表列表:您的 CSS 列出了吗?

标签: css google-chrome-extension


【解决方案1】:

使用!important 标志设置元素本身的样式。然后,您可以确定该样式正在应用到具有最高优先级的元素上。

例子:

var div = document.createElement('div');
// Pick any of these (the first two lines have identical results)
div.style.setProperty('box-shadow', '0 0 3px red', 'important');
div.style.cssText += 'box-shadow: 0 0 3px red !important';

// If the HTML is generated from a string:
div.innerHTML = '<div style="box-shadow:0 0 3px!important;">...</div>';

非示例(有效!):

div.style.boxShadow = '0 0 3px red !important'; // Does not work!

如果您无法设置内联样式,请尝试在您的 CSS 选择器中实现更高的specifity,例如包含一个 ID。

【讨论】:

  • 我的理解是内联样式已经具有最高优先级,并且浏览器确实显示内联样式没有被删除。 (但也没有采取任何行动。)我对正在发生的事情感到困惑。
  • @GeneGolovchinsky 展示一个小例子来说明你的问题。我没有时间从头开始重现您的问题。
  • 我添加了代码 sn-ps。我不确定放置整个扩展程序是否实用,但如有必要,我可以添加不当行为的屏幕截图。请注意,这种奇怪的行为发生在多个站点上; stackoverflow 就是一个例子。
  • @GeneGolovchinsky 至少提及您正在检查 Stack Overflow 上的哪个元素。如果可能,您最好创建一个独立的示例来演示该问题,以供将来参考。
  • 受此影响的元素由我的chrome扩展注入;它们不会出现在网页中。我会尝试整理一个简短的 chrome 扩展,但是部署它们有点麻烦。
猜你喜欢
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 2017-04-03
  • 2019-11-01
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
相关资源
最近更新 更多