【问题标题】:Stylesheet for everything一切的样式表
【发布时间】:2014-06-30 15:08:20
【问题描述】:

我想为所有内容加载 CSS 文件。 对于元素:选项卡、侧边栏、标签、窗口、选项、开发人员工具等。 我需要这个来改变滚动条。

如何在 Firefox addons-sdk 中实现?

【问题讨论】:

  • 你好像忘了问问题。
  • 这是一个很好的问题。我完全理解。请删除反对票的家伙。

标签: javascript firefox firefox-addon firefox-addon-sdk


【解决方案1】:

你所说的一切实际上是指浏览器区域。所以你要做的就是在@-moz-document url("chrome://browser/content/browser.xul") {}的括号内写CSS。否则 CSS 会影响网页内的东西。

在 CSS 表单中加载有两种方法,一种是使用nsIStyleSheetService,一种是使用 window.loadSheet.

window.loadSheet 是推荐的方式。你会这样做:

function registerWindows() {
    var _uri = Services.io.newURI("chrome://aus-view/skin/toolbar.css", null, null);
    aWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils).loadSheet(_uri, 1);
}


function unregisterWindows() {
    var _uri = Services.io.newURI("chrome://aus-view/skin/toolbar.css", null, null);
    aWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils).removeSheet(_uri, 1);
}

您必须确保将工作表加载到新打开的窗口中。

使用 nsIStyleSheetService,您只需 loadAndRegisterSheet,然后您就不必担心窗口的打开和关闭。但我听到的性能更难。不过我不知道这个表演的来源。

Cu.import('resource://gre/modules/Services.jsm');
var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
var cssUri = Services.io.newURI('chrome://content/path/to/your/file.css', null, null);
sss.loadAndRegisterSheet(cssUri, sss.USER_SHEET);

然后,当您想删除它时,您只需:

sss.unregisterSheet(cssUri, sss.USER_SHEET);

现在这两个都使用了文件。您可以创建一个没有任何文件的 URI,如下所示:

var css = '';
css += '* { background-color: red; }';
css += '*.hover { background-color: blue; }';
var cssEncoded = encodeURIComponent(css);
var cssEncodedWithDataURL = 'data:text/css,' + cssEncoded 

然后我们以相同的方式创建我们的 URI:var cssUri = Services.io.newURI(cssEncodedWithDataURL, null, null); 然后您只需以相同的方式加载 stylehseet。 (使用第二种方法的示例:sss.unregisterSheet(cssUri, sss.USER_SHEET)

【讨论】:

  • 我无法使用 addons-sdk。每次同样的事情......; |
  • 你的意思是不能在sdk中使用上面的代码?你可以放在顶部:const {Cc, Ci, Cu} = require("chrome"); 并让cssUrivar cssUri = Services.io.newURI(self.data('yourFileName.css'), null, null); 我没有在上面输入这些东西,因为我总是要查找 sdk 的东西,所以我很懒。
  • 我开始补充,但是:样式仅适用于侧边栏,库窗口。其余的看不到样式。我想工作:在所有页面(选项卡)、面板、Firefox 的面板工具开发人员、Firebug 面板等上。每个滚动条都必须改变样式。
  • 尝试删除 @-moz-document url 包装。
  • 我找到了解决方案。我不得不在sss.AGENT_SHEETsss.loadAndRegisterSheet (cssUri, sss.AGENT_SHEET);上更改sss.USER_SHEET
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-16
  • 1970-01-01
相关资源
最近更新 更多