将StyleSheets添加到Firefox Bootstrapped Addon

时间:2014-07-02 11:51:11

标签: javascript firefox firefox-addon firefox-addon-restartless

手风琴Using the Stylesheet Service

上述文件还指出:

  如果CSS包含#id,则

loadAndRegisterSheet失败。 '#'必须进行百分比编码,详情请参阅错误659650。

行李报告于2011-05-25进行。它仍然是一个错误还是已经解决了?

还有另一种添加CSS的方法,但这是每个窗口,我更喜欢将其排序。

更新
这是样式表的内容

#rpnethelper-separator2:last-child { display: none; }
#rpnethelper-menuitem {
  list-style-image: url('icon16.png');
}

这是实际代码(加上添加的控制台调用)

register: function(css) {

  let sss = Components.classes['@mozilla.org/content/style-sheet-service;1']
                  .getService(Components.interfaces.nsIStyleSheetService);
  let cssURI = Services.io.newURI(css, null, null);
  sss.loadAndRegisterSheet(cssURI, sss.USER_SHEET);
},

我用try{} catch{}尝试过,我没有收到任何错误 如何/在哪里可以查看USER_SHEET

目前,我将使用内联样式(它不支持伪类)但我仍想解决此问题。

最终更新:
出于某种原因,未使用USER_SHEET的代码与AUTHOR_SHEET一起正常工作 有趣的是,毕竟,我认为仅仅为一个伪类进行额外处理是值得的,所以我选择了(简单)内联样式

1 个答案:

答案 0 :(得分:3)

您忘记指定正确的命名空间。将以下内容添加到工作表的第一行。

@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");

您已经链接的文档状态:

  

使用此服务添加的样式表适用于chrome和内容文档。如果要将样式表应用于XUL文档,请记住声明正确的命名空间。

此外,如果您定位到Firefox 18及更高版本(实际上,支持早期版本没有任何优点,因为这些版本不受支持且包含已知的安全漏洞,因此用户不应该使用它们),您应该考虑使用nsIDOMWindowUtils.loadSheet代替。这只会将工作表加载到实际窗口中,而不是全局应用于所有窗口。网站。

if (window instanceof Ci.nsIInterfaceRequestor) {
  let winUtils = window.getInterface(Ci.nsIDOMWindowUtils);
  let uri = Services.io.newURI(..., null, null);
  winUtils.loadSheet(uri, Ci.nsIDOMWindowUtils.AUTHOR_SHEET);
  // Remove with winUtils.removeSheet() again on shutdown
}

编辑您大多数时候都想使用AUTHOR_SHEET(无论是样式表服务还是窗口工具)。这相当于覆盖中的xml-stylesheet

  
loadAndRegisterSheet fails if CSS contains #id. '#' must be percent-encoded, details see bug 659650.
         

行李报告于2011-05-25进行。它仍然是一个错误还是已经解决了?

  

该错误报告仅适用data:个URI。此外,该错误报告无效,#在URI中具有特殊含义,因此当它直接成为URI的一部分时,您必须对其进行编码(与data: URI的情况一样) 。如果您要注册常规chrome: / resource: / file: / http: URI,则不需要特殊编码。