手风琴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
一起正常工作
有趣的是,毕竟,我认为仅仅为一个伪类进行额外处理是值得的,所以我选择了(简单)内联样式
答案 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,则不需要特殊编码。