3

I'm noticing some odd behavior with CSS added by GM_addStyle(). I have the following userscript:

// ==UserScript==
// @name        Reddit
// @namespace   http://example.com
// @include     http://www.reddit.com/
// @grant       GM_addStyle
// @version     1
// ==/UserScript==

GM_addStyle("a:visited { background-color: yellow !important; }");

Now, I'd expect the behavior to either work for all links or work for no links (due to the security patch), but what I get is an inconsistent behavior in that it works for some link, but not other.

Works for hot/top/wiki, but not any other links

Could anyone explain the above behavior for me?

4

1 回答 1

4

来自隐私和 MDN 的 :visited 选择器

只有以下属性可以应用于访问的链接:

  • 颜色
  • 背景颜色
  • 边框颜色(及其子属性)
  • 轮廓颜色
  • 填充和描边属性的颜色部分

此外,即使您可以为已访问链接设置属性,您也无法更改未访问链接和已访问链接之间的透明度,否则您将能够使用 rgba() 或 hsla() 颜色值或透明关键词。

显然,这意味着,在 Firefox 中,为了让您更改背景颜色,链接必须首先具有背景(您不能使用:visited选择器添加)。所以在尝试设置访问链接的背景颜色之前设置背景。

这对我有用:

// ==UserScript==
// @name        _Reddit, style visited links
// @include     http://www.reddit.com/*
// @grant       GM_addStyle
// @version     1
// ==/UserScript==

GM_addStyle (
      /* For precision, only prime the desired links, that don't
        otherwise have a BG.
      */
      "a.title { background: white; }"
    + "a:visited { background-color: yellow !important; }"
);


请注意,我只是“启动”了我明确感兴趣的链接,这些链接还没有背景。因此,a.title {...而不是a {...


另请注意,对于仅更改样式,Stylish通常是更好的选择(性能和易于设置)。

于 2013-07-20T19:51:39.037 回答