为Firefox bootstrap插件添加样式表

Adding StyleSheets to Firefox Bootstrapped Addon

本文关键字:样式 添加 插件 Firefox bootstrap      更新时间:2023-09-26

使用样式表服务

上述文件还规定:

loadAndRegisterSheet失败,如果CSS包含#id。'#'必须是百分比编码,详见bug 659650。

袋子报告是在2011-05-25做的。它仍然是一个bug还是已经被解决了?

还有另一种添加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一起工作
有趣的是,在所有这些之后,我决定不值得为一个伪类进行额外的处理,所以我选择了(简单的)内联样式

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

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

已链接的文档状态:

使用此服务添加的样式表将同时应用于chrome和content文档。如果您希望将样式表应用于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
}

Edit大多数情况下您都需要使用AUTHOR_SHEET(无论是样式表服务还是窗口工具)。这与覆盖层中的xml-stylesheet更等效。

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

袋子报告是在2011-05-25做的。它仍然是一个bug还是已经被解决了?

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