Сам userChrome.css перезагружается, но на правила @import url(file.css); действие не распространяется.
Понятно, спасибо.
Вот эта должна перезагружать и файлы из @import, наверно.
custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EReload%20user%7BChrome%2C%20Content%7D.css%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-2%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%28obj%20%3D%3E%20%7B%0A%09this.onclick%20%3D%20obj.click.bind%28obj%29%3B%0A%09this.oncontextmenu%20%3D%20obj.contextmenu.bind%28obj%29%3B%0A%09this.tooltipText%20%3D%20%22L%3A%20Reload%20userChrome.css%5CnM%3A%20CB%20Menu%5CnR%3A%20Reload%20userContent.css%22%3B%0A%7D%29%28%7B%0A%09click%28e%29%20%7B%0A%09%09if%20%28e.button%20%3D%3D%201%29%20return%20gShowPopup%28self%29%3B%0A%09%09if%20%28e.button%20%7C%7C%20%21this.chromeSheet%29%20return%3B%0A%09%09this.reload%28this.chromeSheet%29%3B%0A%09%09this.restyle%280%29%3B%0A%09%7D%2C%0A%09async%20contextmenu%28e%29%20%7B%0A%09%09if%20%28e.ctrlKey%20%7C%7C%20e.shiftKey%20%7C%7C%20e.detail%20%21%3D%201%20%7C%7C%20%21this.contentSheetURL%29%20return%3B%0A%09%09e.preventDefault%28%29%3B%0A%0A%09%09var%20count%20%3D%20Services.ppmm.childCount%2C%20one%20%3D%20count%20%3D%3D%201%3B%0A%09%09var%20data%20%3D%20await%20this.reloadTab%28%22about%3Aconfig%22%2C%20one%20%3F%20false%20%3A%20%7B%7D%29%3B%0A%09%09if%20%28one%29%20this.reloadTab%28%29%3B%0A%09%09else%20if%20%28data%29%20%7B%0A%09%09%09var%20url%20%3D%20%22data%3A%2C%22%20+%20encodeURIComponent%28%0A%09%09%09%09self.Help%20+%20this.contentSheetURL%20+%20%27%22%2C%20%27%20+%20JSON.stringify%28data%29%20+%20%22%29%3B%22%0A%09%09%09%29%3B%0A%09%09%09var%20types%20%3D%20%5B%22web%22%2C%20%22file%22%2C%20%22extension%22%5D%3B%0A%09%09%09for%28var%20ind%20%3D%200%3B%20ind%20%3C%20count%3B%20ind++%29%20%7B%0A%09%09%09%09var%20child%20%3D%20Services.ppmm.getChildAt%28ind%29%3B%0A%09%09%09%09types.includes%28child.remoteType%29%20%26%26%20child.loadProcessScript%28url%2C%20false%29%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09this.restyle%28250%29%3B%0A%09%7D%2C%0A%09reload%28sheet%2C%20obj%29%20%7B%0A%09%09var%20style%20%3D%20Cu.readURI%28Services.io.newURI%28sheet.href%29%29%3B%0A%09%09this.inIDOMUtils.parseStyleSheet%28sheet%2C%20style%29%3B%0A%09%09if%20%28obj%29%20obj%5Bsheet.href%5D%20%3D%20style%3B%0A%09%09for%28var%20ind%20%3D%200%2C%20len%20%3D%20sheet.cssRules.length%3B%20ind%20%3C%20len%3B%20ind++%29%20%7B%0A%09%09%09var%20rule%20%3D%20sheet.cssRules.item%28ind%29%3B%0A%0A%09%09%09rule.type%20%3D%3D%20rule.IMPORT_RULE%0A%09%09%09%26%26%20rule.styleSheet.href.startsWith%28%22file%3A///%22%29%0A%09%09%09%26%26%20this.reload%28rule.styleSheet%2C%20obj%29%3B%0A%09%09%7D%0A%09%09return%20obj%3B%0A%09%7D%2C%0A%09reloadTab%28url%2C%20obj%29%20%7B%0A%09%09var%20tab%20%3D%20gBrowser.addTab%28url%29%3B%0A%09%09return%20new%20Promise%28resolve%20%3D%3E%20%7B%0A%09%09%09var%20result%2C%20stop%2C%20destroy%20%3D%20%28%29%20%3D%3E%20%7B%0A%09%09%09%09if%20%28%21stop%29%20resolve%28result%29%2C%20gBrowser.removeTab%28tab%29%2C%20stop%20%3D%20true%3B%0A%09%09%09%7D%0A%09%09%09setTimeout%28destroy%2C%20500%29%3B%0A%09%09%09try%20%7B%0A%09%09%09%09gBrowser.hideTab%28tab%29%3B%0A%09%09%09%09tab.linkedBrowser.addEventListener%28%22DOMContentLoaded%22%2C%20e%20%3D%3E%20%7B%0A%09%09%09%09%09var%20sheet%20%3D%20this.getSheet%28e.target%2C%20this.contentSheetURL%29%3B%0A%09%09%09%09%09if%20%28sheet%29%20result%20%3D%20this.reload%28sheet%2C%20obj%29%3B%0A%09%09%09%09%09destroy%28%29%3B%0A%09%09%09%09%7D%2C%20%7Bonce%3A%20true%7D%29%3B%0A%09%09%09%7D%20catch%28ex%29%20%7B%0A%09%09%09%09destroy%28%29%3B%0A%09%09%09%7D%0A%09%09%7D%29%3B%0A%09%7D%2C%0A%09getSheet%28doc%2C%20href%29%20%7B%0A%09%09var%20sheets%20%3D%20this.inIDOMUtils.getAllStyleSheets%28doc%29%3B%0A%09%09return%20sheets.find%28sheet%20%3D%3E%20sheet.href%20%3D%3D%20href%29%3B%0A%09%7D%2C%0A%09get%20contentSheetURL%28%29%20%7B%0A%09%09var%20file%20%3D%20Services.dirsvc.get%28%22UChrm%22%2C%20Ci.nsIFile%29%3B%0A%09%09file.append%28%22userContent.css%22%29%3B%0A%09%09if%20%28%21file.exists%28%29%29%20return%20null%3B%0A%09%09delete%20this.contentSheetURL%3B%0A%09%09return%20this.contentSheetURL%20%3D%20Services.io.newFileURI%28file%29.spec%3B%0A%09%7D%2C%0A%09get%20inIDOMUtils%28%29%20%7B%0A%09%09delete%20this.inIDOMUtils%3B%0A%09%09return%20this.inIDOMUtils%20%3D%20Cc%5B%22@mozilla.org/inspector/dom-utils%3B1%22%5D.getService%28Ci.inIDOMUtils%29%3B%0A%09%7D%2C%0A%09get%20restyle%28%29%20%7B%0A%09%09var%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%09%09var%20uri%20%3D%20Services.io.newURI%28%22data%3Atext/css%2C%3Aroot%7B%7D%22%29%2C%20type%20%3D%20sss.USER_SHEET%3B%0A%09%09delete%20this.restyle%3B%20return%20this.restyle%20%3D%20delay%20%3D%3E%20setTimeout%28%28%29%20%3D%3E%20%7B%0A%09%09%09sss.loadAndRegisterSheet%28uri%2C%20type%29%3B%0A%09%09%09sss.unregisterSheet%28uri%2C%20type%29%3B%0A%09%09%7D%2C%20delay%29%3B%0A%09%7D%2C%0A%09get%20chromeSheet%28%29%20%7B%0A%09%09var%20file%20%3D%20Services.dirsvc.get%28%22UChrm%22%2C%20Ci.nsIFile%29%3B%0A%09%09file.append%28%22userChrome.css%22%29%3B%0A%09%09if%20%28%21file.exists%28%29%29%20return%20null%3B%0A%0A%09%09var%20href%20%3D%20Services.io.newFileURI%28file%29.spec%3B%0A%09%09var%20sheet%20%3D%20this.getSheet%28document%2C%20href%29%3B%0A%09%09if%20%28%21sheet%29%20return%20null%3B%0A%0A%09%09delete%20this.chromeSheet%3B%20return%20this.chromeSheet%20%3D%20sheet%3B%0A%09%7D%0A%7D%29%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%28%28href%2C%20data%29%20%3D%3E%20%7B%0A%09var%20en%20%3D%20Services.ww.getWindowEnumerator%28null%29%3B%0A%09if%20%28%21en.hasMoreElements%28%29%29%20return%3B%0A%09var%20doc%20%3D%20en.getNext%28%29.document%3B%0A%0A%09var%20du%20%3D%20Components.classes%5B%22@mozilla.org/inspector/dom-utils%3B1%22%5D%0A%09%09.getService%28Components.interfaces.inIDOMUtils%29%3B%0A%09var%20reload%20%3D%20sheet%20%3D%3E%20%7B%0A%09%09var%20style%20%3D%20data%5Bsheet.href%5D%3B%20if%20%28%21style%29%20return%3B%0A%0A%09%09du.parseStyleSheet%28sheet%2C%20style%29%3B%0A%09%09for%28var%20ind%20%3D%200%2C%20len%20%3D%20sheet.cssRules.length%3B%20ind%20%3C%20len%3B%20ind++%29%20%7B%0A%09%09%09var%20rule%20%3D%20sheet.cssRules.item%28ind%29%3B%0A%0A%09%09%09rule.type%20%3D%3D%20rule.IMPORT_RULE%0A%09%09%09%26%26%20rule.styleSheet.href.startsWith%28%22file%3A///%22%29%0A%09%09%09%26%26%20reload%28rule.styleSheet%29%3B%0A%09%09%7D%0A%09%7D%0A%09var%20sheet%20%3D%20du.getAllStyleSheets%28doc%29.find%28sheet%20%3D%3E%20sheet.href%20%3D%3D%20href%29%3B%0A%09if%20%28sheet%29%20reload%28sheet%29%3B%0A%7D%29%28%22%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Отсутствует
Вот эта должна перезагружать и файлы из @import, наверно.
Перезагружает. Отличная кнопища.
Единственный вопрос: встречал где-то утверждение, что для этой кнопки нужен псевдокласс :root {} в начале userChrome.css
Но и без него всё работает.
Отсутствует
Понятно, спасибо.Вот эта должна перезагружать и файлы из @import, наверно.
скрытый текстВыделить кодКод:
custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EReload%20user%7BChrome%2C%20Content%7D.css%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-2%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%28obj%20%3D%3E%20%7B%0A%09this.onclick%20%3D%20obj.click.bind%28obj%29%3B%0A%09this.oncontextmenu%20%3D%20obj.contextmenu.bind%28obj%29%3B%0A%09this.tooltipText%20%3D%20%22L%3A%20Reload%20userChrome.css%5CnM%3A%20CB%20Menu%5CnR%3A%20Reload%20userContent.css%22%3B%0A%7D%29%28%7B%0A%09click%28e%29%20%7B%0A%09%09if%20%28e.button%20%3D%3D%201%29%20return%20gShowPopup%28self%29%3B%0A%09%09if%20%28e.button%20%7C%7C%20%21this.chromeSheet%29%20return%3B%0A%09%09this.reload%28this.chromeSheet%29%3B%0A%09%09this.restyle%280%29%3B%0A%09%7D%2C%0A%09async%20contextmenu%28e%29%20%7B%0A%09%09if%20%28e.ctrlKey%20%7C%7C%20e.shiftKey%20%7C%7C%20e.detail%20%21%3D%201%20%7C%7C%20%21this.contentSheetURL%29%20return%3B%0A%09%09e.preventDefault%28%29%3B%0A%0A%09%09var%20count%20%3D%20Services.ppmm.childCount%2C%20one%20%3D%20count%20%3D%3D%201%3B%0A%09%09var%20data%20%3D%20await%20this.reloadTab%28%22about%3Aconfig%22%2C%20one%20%3F%20false%20%3A%20%7B%7D%29%3B%0A%09%09if%20%28one%29%20this.reloadTab%28%29%3B%0A%09%09else%20if%20%28data%29%20%7B%0A%09%09%09var%20url%20%3D%20%22data%3A%2C%22%20+%20encodeURIComponent%28%0A%09%09%09%09self.Help%20+%20this.contentSheetURL%20+%20%27%22%2C%20%27%20+%20JSON.stringify%28data%29%20+%20%22%29%3B%22%0A%09%09%09%29%3B%0A%09%09%09var%20types%20%3D%20%5B%22web%22%2C%20%22file%22%2C%20%22extension%22%5D%3B%0A%09%09%09for%28var%20ind%20%3D%200%3B%20ind%20%3C%20count%3B%20ind++%29%20%7B%0A%09%09%09%09var%20child%20%3D%20Services.ppmm.getChildAt%28ind%29%3B%0A%09%09%09%09types.includes%28child.remoteType%29%20%26%26%20child.loadProcessScript%28url%2C%20false%29%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09this.restyle%28250%29%3B%0A%09%7D%2C%0A%09reload%28sheet%2C%20obj%29%20%7B%0A%09%09var%20style%20%3D%20Cu.readURI%28Services.io.newURI%28sheet.href%29%29%3B%0A%09%09this.inIDOMUtils.parseStyleSheet%28sheet%2C%20style%29%3B%0A%09%09if%20%28obj%29%20obj%5Bsheet.href%5D%20%3D%20style%3B%0A%09%09for%28var%20ind%20%3D%200%2C%20len%20%3D%20sheet.cssRules.length%3B%20ind%20%3C%20len%3B%20ind++%29%20%7B%0A%09%09%09var%20rule%20%3D%20sheet.cssRules.item%28ind%29%3B%0A%0A%09%09%09rule.type%20%3D%3D%20rule.IMPORT_RULE%0A%09%09%09%26%26%20rule.styleSheet.href.startsWith%28%22file%3A///%22%29%0A%09%09%09%26%26%20this.reload%28rule.styleSheet%2C%20obj%29%3B%0A%09%09%7D%0A%09%09return%20obj%3B%0A%09%7D%2C%0A%09reloadTab%28url%2C%20obj%29%20%7B%0A%09%09var%20tab%20%3D%20gBrowser.addTab%28url%29%3B%0A%09%09return%20new%20Promise%28resolve%20%3D%3E%20%7B%0A%09%09%09var%20result%2C%20stop%2C%20destroy%20%3D%20%28%29%20%3D%3E%20%7B%0A%09%09%09%09if%20%28%21stop%29%20resolve%28result%29%2C%20gBrowser.removeTab%28tab%29%2C%20stop%20%3D%20true%3B%0A%09%09%09%7D%0A%09%09%09setTimeout%28destroy%2C%20500%29%3B%0A%09%09%09try%20%7B%0A%09%09%09%09gBrowser.hideTab%28tab%29%3B%0A%09%09%09%09tab.linkedBrowser.addEventListener%28%22DOMContentLoaded%22%2C%20e%20%3D%3E%20%7B%0A%09%09%09%09%09var%20sheet%20%3D%20this.getSheet%28e.target%2C%20this.contentSheetURL%29%3B%0A%09%09%09%09%09if%20%28sheet%29%20result%20%3D%20this.reload%28sheet%2C%20obj%29%3B%0A%09%09%09%09%09destroy%28%29%3B%0A%09%09%09%09%7D%2C%20%7Bonce%3A%20true%7D%29%3B%0A%09%09%09%7D%20catch%28ex%29%20%7B%0A%09%09%09%09destroy%28%29%3B%0A%09%09%09%7D%0A%09%09%7D%29%3B%0A%09%7D%2C%0A%09getSheet%28doc%2C%20href%29%20%7B%0A%09%09var%20sheets%20%3D%20this.inIDOMUtils.getAllStyleSheets%28doc%29%3B%0A%09%09return%20sheets.find%28sheet%20%3D%3E%20sheet.href%20%3D%3D%20href%29%3B%0A%09%7D%2C%0A%09get%20contentSheetURL%28%29%20%7B%0A%09%09var%20file%20%3D%20Services.dirsvc.get%28%22UChrm%22%2C%20Ci.nsIFile%29%3B%0A%09%09file.append%28%22userContent.css%22%29%3B%0A%09%09if%20%28%21file.exists%28%29%29%20return%20null%3B%0A%09%09delete%20this.contentSheetURL%3B%0A%09%09return%20this.contentSheetURL%20%3D%20Services.io.newFileURI%28file%29.spec%3B%0A%09%7D%2C%0A%09get%20inIDOMUtils%28%29%20%7B%0A%09%09delete%20this.inIDOMUtils%3B%0A%09%09return%20this.inIDOMUtils%20%3D%20Cc%5B%22@mozilla.org/inspector/dom-utils%3B1%22%5D.getService%28Ci.inIDOMUtils%29%3B%0A%09%7D%2C%0A%09get%20restyle%28%29%20%7B%0A%09%09var%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%09%09var%20uri%20%3D%20Services.io.newURI%28%22data%3Atext/css%2C%3Aroot%7B%7D%22%29%2C%20type%20%3D%20sss.USER_SHEET%3B%0A%09%09delete%20this.restyle%3B%20return%20this.restyle%20%3D%20delay%20%3D%3E%20setTimeout%28%28%29%20%3D%3E%20%7B%0A%09%09%09sss.loadAndRegisterSheet%28uri%2C%20type%29%3B%0A%09%09%09sss.unregisterSheet%28uri%2C%20type%29%3B%0A%09%09%7D%2C%20delay%29%3B%0A%09%7D%2C%0A%09get%20chromeSheet%28%29%20%7B%0A%09%09var%20file%20%3D%20Services.dirsvc.get%28%22UChrm%22%2C%20Ci.nsIFile%29%3B%0A%09%09file.append%28%22userChrome.css%22%29%3B%0A%09%09if%20%28%21file.exists%28%29%29%20return%20null%3B%0A%0A%09%09var%20href%20%3D%20Services.io.newFileURI%28file%29.spec%3B%0A%09%09var%20sheet%20%3D%20this.getSheet%28document%2C%20href%29%3B%0A%09%09if%20%28%21sheet%29%20return%20null%3B%0A%0A%09%09delete%20this.chromeSheet%3B%20return%20this.chromeSheet%20%3D%20sheet%3B%0A%09%7D%0A%7D%29%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%28%28href%2C%20data%29%20%3D%3E%20%7B%0A%09var%20en%20%3D%20Services.ww.getWindowEnumerator%28null%29%3B%0A%09if%20%28%21en.hasMoreElements%28%29%29%20return%3B%0A%09var%20doc%20%3D%20en.getNext%28%29.document%3B%0A%0A%09var%20du%20%3D%20Components.classes%5B%22@mozilla.org/inspector/dom-utils%3B1%22%5D%0A%09%09.getService%28Components.interfaces.inIDOMUtils%29%3B%0A%09var%20reload%20%3D%20sheet%20%3D%3E%20%7B%0A%09%09var%20style%20%3D%20data%5Bsheet.href%5D%3B%20if%20%28%21style%29%20return%3B%0A%0A%09%09du.parseStyleSheet%28sheet%2C%20style%29%3B%0A%09%09for%28var%20ind%20%3D%200%2C%20len%20%3D%20sheet.cssRules.length%3B%20ind%20%3C%20len%3B%20ind++%29%20%7B%0A%09%09%09var%20rule%20%3D%20sheet.cssRules.item%28ind%29%3B%0A%0A%09%09%09rule.type%20%3D%3D%20rule.IMPORT_RULE%0A%09%09%09%26%26%20rule.styleSheet.href.startsWith%28%22file%3A///%22%29%0A%09%09%09%26%26%20reload%28rule.styleSheet%29%3B%0A%09%09%7D%0A%09%7D%0A%09var%20sheet%20%3D%20du.getAllStyleSheets%28doc%29.find%28sheet%20%3D%3E%20sheet.href%20%3D%3D%20href%29%3B%0A%09if%20%28sheet%29%20reload%28sheet%29%3B%0A%7D%29%28%22%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Я прошу прощение за глупый вопрос Чтобы создать кнопку для перезапуска userChrome.css, код, который под спойлером, где нужно сохранить - тоже в нём (userChrome.css)? Спасибо
Разобрался, однако Custom Buttons для етого нужон
Отредактировано Viatcheslav (27-11-2017 20:04:39)
Отсутствует
Разобрался, однако Custom Buttons для етого нужон
Да, это адрес кнопки, которая создаётся посредством расширения Custom Buttons.
Ну а насчёт userChrome.css, пока XBL ещё с нами сделать можно многое.
Могу рассказать байку про что-то простое
В жертву была выбрана кнопка в виде конвертика «Отправить ссылку» (#email-link-button).
Вот, думаю, она то и будет у меня перезагружать userChrome.css
Перерисовал код как стиль, добавил в userChrome.css
Перетащил кнопку в нужное расположение.
Рестарт.
Кнопка, вроде, вполне себе рабочая получилась
@-moz-document url(chrome://browser/content/browser.xul) { toolbarbutton#email-link-button > image.toolbarbutton-icon { list-style-image: url("data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/DAAj/wwAM/8MADP/DAAz/wwAM/8MADP/DAAz/wwAM/8MADP/DAAz/wwAM/8MADP/DAAz/wwAM/8MACwAAAAA/5JWwP+aXv//mFz//5hc//+XW///l1v//5hc//+YXP//mFz//5hc//+YXP//mFz//5hc//+ZXf//mV3hAAAAAP+aXv///8/////P////z////8/////P////z////8/////P////z////8/////P////z////8///5ld/wAAAAD/mFz////P//9rL///q2///6hs////z///ai7//6xw//+rb///qm7//6pu//+qbv//qGz////P//+YXP8AAAAA/5hc////z////8/////P////z////8/////P////z////8/////P////z////8/////P////z///l1v/AAAAAP+YXP///8///2ww//+tcf//q2///6hs////z///ay///6xw//+pbf///8///2sv//+qbv///8///5hc/wAAAAD/mFz////P////z////8/////O////zP///8v////M////zP///83////M////zv///8z////P//+YXP8AAAAA/5hc////z///bzP//3A1//+vc///rXH//6xw//+rb////8f//2ww//+ucv//rXH//6tv////z///mFz/AAAAAP+ZXf///8/////J////yv///8n////H////yv///8n////G////xv///8n///u/////yP///8///5hc/wAAAAD/mV3////P//9TF////87//1QY////yv//Vhr//1cb//+XW////8f//5db//9UGP//TxP////P//+ZXf8AAAAA/5pe////z///Wh7//10h//9cIP///8z//1wg////z///WR3////J//9WGv///8b///q+////zv//mFz/AAAAAP+ZXf///8///1cb////y///WR3////I//9eIv//YCT//3I3////x///Vxv///q////ytv///8z//5hc/wAAAAD/mV3////P//+SVv///8L//5VZ///9wP//XCD////K//9aHv///sH//1cb///6vf//8rX////O//+YXP8AAAAA/5ld////z///jlH//1QY//+QU///9bj//1cb//9ZHf//klX///S3//+RVP//VBn//08U////z///mV3/AAAAAP+bX////8/////I////y////8n////I////y////8z////J////x////8n////L////yv///8///5tf/wAAAAD/nmLv/5tf//+ZXf//ml7//5pe//+ZXf//ml7//5pe//+aXv//mV3//5pe//+aXv//ml7//5tf//+eYu8AAAAAAAGsQQABrEEAAaxBAAGsQQABrEEAAaxBAAGsQQABrEEAAaxBAAGsQQABrEEAAaxBAAGsQQABrEEAAaxBAAGsQQ==") !important; --code:((obj, btn) => { btn.onclick = btn.oncontextmenu = e => { if (e.detail == 1) obj[e.type](e); } btn.setAttribute("label", "Reload user{Chrome, Content}.css"); btn.setAttribute("tooltiptext", "L: Reload userChrome.css\nR: Reload userContent.css"); })({ click(e) { if (e.button || !this.chromeSheet) return; e.preventDefault(); this.reload(this.chromeSheet); this.restyle(0); }, async contextmenu(e) { if (e.ctrlKey || e.shiftKey || !this.contentSheetURL) return; e.preventDefault(); var count = Services.ppmm.childCount, one = count == 1; var data = await this.reloadTab("about:config", one ? false : {}); if (one) this.reloadTab(); else if (data) { var url = "data:," + encodeURIComponent( this.processScript + '("' + this.contentSheetURL + '", ' + JSON.stringify(data) + ")" ); var types = ["web", "file", "extension"]; for(var ind = 0; ind < count; ind++) { var child = Services.ppmm.getChildAt(ind); types.includes(child.remoteType) && child.loadProcessScript(url, false); } } this.restyle(250); }, processScript: `((href, data) => { var en = Services.ww.getWindowEnumerator(null); if (!en.hasMoreElements()) return; var doc = en.getNext().document; var du = Components.classes["@mozilla.org/inspector/dom-utils;1"] .getService(Components.interfaces.inIDOMUtils); var reload = sheet => { var style = data[sheet.href]; if (!style) return; du.parseStyleSheet(sheet, style); for(var ind = 0, len = sheet.cssRules.length; ind < len; ind++) { var rule = sheet.cssRules.item(ind); rule.type == rule.IMPORT_RULE && rule.styleSheet.href.startsWith("file:///") && reload(rule.styleSheet); } } var sheet = du.getAllStyleSheets(doc).find(sheet => sheet.href == href); if (sheet) reload(sheet); })`, reload(sheet, obj) { var style = Cu.readURI(Services.io.newURI(sheet.href)); this.inIDOMUtils.parseStyleSheet(sheet, style); if (obj) obj[sheet.href] = style; for(var ind = 0, len = sheet.cssRules.length; ind < len; ind++) { var rule = sheet.cssRules.item(ind); rule.type == rule.IMPORT_RULE && rule.styleSheet.href.startsWith("file:///") && this.reload(rule.styleSheet, obj); } return obj; }, reloadTab(url, obj) { var tab = gBrowser.addTab(url); return new Promise(resolve => { var result, stop, destroy = () => { if (!stop) resolve(result), gBrowser.removeTab(tab), stop = true; } setTimeout(destroy, 500); try { tab.style.setProperty("display", "none", "important"); tab.linkedBrowser.addEventListener("DOMContentLoaded", e => { var sheet = this.getSheet(e.target, this.contentSheetURL); if (sheet) result = this.reload(sheet, obj); destroy(); }, {once: true}); } catch(ex) { destroy(); } }); }, getSheet(doc, href) { var sheets = this.inIDOMUtils.getAllStyleSheets(doc); return sheets.find(sheet => sheet.href == href); }, get contentSheetURL() { var file = Services.dirsvc.get("UChrm", Ci.nsIFile); file.append("userContent.css"); if (!file.exists()) return null; delete this.contentSheetURL; return this.contentSheetURL = Services.io.newFileURI(file).spec; }, get inIDOMUtils() { delete this.inIDOMUtils; return this.inIDOMUtils = Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils); }, get restyle() { var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); var uri = Services.io.newURI("data:text/css,:root{}"), type = sss.USER_SHEET; delete this.restyle; return this.restyle = delay => setTimeout(() => { sss.loadAndRegisterSheet(uri, type); sss.unregisterSheet(uri, type); }, delay); }, get chromeSheet() { var file = Services.dirsvc.get("UChrm", Ci.nsIFile); file.append("userChrome.css"); if (!file.exists()) return null; var href = Services.io.newFileURI(file).spec; var sheet = this.getSheet(document, href); if (!sheet) return null; delete this.chromeSheet; return this.chromeSheet = sheet; } }, this.parentNode) !important; -moz-binding: url('data:text/xml,\ <bindings xmlns="http://www.mozilla.org/xbl"><binding id="user{Chrome,Content}.css_Reloader"><implementation>\%0A\ <constructor>eval(getComputedStyle(this).getPropertyValue("--code"));</constructor>\%0A\ </implementation></binding></bindings>\ ') !important; } }
Отсутствует
Могу рассказать байку про что-то простое
Круто! Работает как должна.
А этот Ваш XBL будет и дальше существовать?
P. S. И правильно ли я понимаю, что даже несмотря на мизерное (околонулевое?) потребление ресурсов одной-единственной кнопкой CB, вот эта Ваша... хм... Кнопка(?) вообще никак не сказывается на ресурсопотреблении? Ну кроме момента старта браузера, может быть.
Отредактировано Coroner (27-11-2017 21:55:00)
Отсутствует
этот Ваш XBL
Забавная работа со Словом. Улыбнулся, спасибо .
Introduction to XBL
XBL Removal
эта Ваша... хм... Кнопка(?) вообще никак не сказывается на ресурсопотреблении? Ну кроме момента старта браузера
Ну прям чтоб вообще никак, так быть не может.
Когда сама кнопка будет подвешена на DOM-дерево,
и обретёт собственных XBL-потомков, то для них стили будут пересчитаны,
и вот тут-то, для первого из них, и подключится этот биндинг, и код конструктора будет исполнен.
Таким обазом какие-то ресурсы будут задействованы.
Уж не знаю как по сравнению с CB-кнопкой, но для тех, кому такое надо,
сама возможность этого бесценна, пусть даже и откушает немного сколько-то.
Отсутствует
broker
ридер если не нужен совсем: about:config
reader.parse-on-load.enabled ; false
reader.parse-on-load.force-enabled ; false
или просто спрятать
FVD Speed Dial
Отсутствует
Подскажите пожалуйста, как убрать замыливание последних букв названий вкладок, и вернуть многоточие?
«The Truth Is Out There»
Отсутствует
unter_officer, насчёт замыливания было в теме выше. https://forum.mozilla-russia.org/viewto … 88#p735788
.tabbrowser-tab .tab-label-container[textoverflow]:not([pinned]) { mask-image: none !important; }
А вот про многоточие — не подскажу.
Отсутствует
Coroner
Про замыливание видел. Это не совсем то. Хотелось бы вернуть вариант с точками в конце, как было в ранних версиях FF.
«The Truth Is Out There»
Отсутствует
Отсутствует
У меня есть стиль, который запускается из кнопки
/*AGENT_SHEET*/ /* Не работает на сайтах */ @-moz-document regexp("https?://(?!www.pcradio.ru|ria.ru|pipec.ru|www.redtube.com|www.portableappz.ru|hi-news.ru).*") { a, a span {text-decoration: none !important; color: blue !important;} a:visited, a:visited span {color: red !important;} a:hover, a:hover span {text-shadow: 0px 0px 8px green !important; transition: text-shadow .2s linear !important;} a:active, a:active span {color: Silver !important;} } /* Работает на сайтах */ @-moz-document domain("hi-news.ru"), domain("pcradio.ru"), domain("ria.ru"), domain("pipec.ru"), domain("www.redtube.com"), domain("www.portableappz.ru") { a:visited, a:visited span {color: #FF0000 !important;} a:hover, a:hover span {text-shadow: 0px 0px 8px green !important; transition: text-shadow .2s linear !important;} a:active, a:active span {color: Silver !important;} }
Отсутствует
Может поправить регулярку
regexp("https?\:\/\/(?!www.pcradio.ru|ria.ru|pipec.ru|www.redtube.com|www.portableappz.ru|hi-news.ru).+")
если нет значит кнопка глючит
Отредактировано Vitaliy V. (28-12-2017 13:52:14)
Отсутствует
Возможно, это баг ФФ57 ?
Gecko reuses the same mechanism used when parsing a url-token when parsing the domain() or url-prefix() URL matching functions for a @-moz-document rule.
Firefox's new parallel CSS engine (also known as Quantum CSS or Stylo, planned for release in Firefox 57) does not use the same mechanism and it does not consider tokens invalid when they contain brackets or quotes (bug 1362333).
Этот стиль включается нормально
/*AGENT_SHEET*/ a, a span { text-decoration: none !important; color: blue !important; } a:visited, a:visited span {color: red !important;} a:hover, a:hover span { text-shadow: 0px 0px 8px green !important; transition: text-shadow .2s linear !important; } a:active, a:active span {color: Silver !important;}
Отредактировано Ultima2m (24-12-2017 13:44:42)
Отсутствует
Да возможно баги Stylo благо я не пользую Quantum
Отредактировано Vitaliy V. (28-12-2017 13:52:27)
Отсутствует
После долгой и долгой долбежки получилось заставить изменить цвет уже просмотренных видео в плей листе youtube. Всё решилось этим — h3.ytd-compact-video-renderer {color: inherit}
/* --- ЗАГОЛОВКИ ПОСЕЩЕННЫЕ «ВИДЕО»--- */ h3.style-scope.ytd-grid-video-renderer #video-title:visited, h3.title-and-badge.style-scope.ytd-video-renderer #video-title:visited {color: #999 !important;} /* --- ЗАГОЛОВКИ ПОСЕЩЕННЫЕ ПЛЕЙ ЛИСТ --- */ h3.ytd-compact-video-renderer {color: inherit} a.yt-simple-endpoint.ytd-compact-video-renderer:visited {color: #999 !important;}
Отсутствует
Помогите пожалуйста доработать стиль, который на ютубе автоматически расскрывает описание видео и комментарии (кнопка "Читать дальше").
Можно ли добавить, чтобы он так же авоматически расскрывал ответы (кнопка "Показать ответы")? (Я использую старый интерфейс ютуба)
https://userstyles.org/styles/137943/al … escription
@-moz-document domain("www.youtube.com") { /* Expand comments */ .comment-renderer-text-content, /* old UI */ ytd-comment-renderer ytd-expander[collapsed] > #content.ytd-expander /* Material UI */ { max-height: none; } /* Remove "Read more" link in comments */ .comment-text-toggle-link.read-more, /* old UI */ ytd-comment-renderer #more /* Material UI */ { display: none; } /* Expand description (old UI) */ #watch-description #watch-description-text { max-height: none; padding-top: 4px; } /* Expand metadata (old UI) */ #watch-description #watch-description-extras li { display: block; } /* Hide "Show more" button in description (old UI only) */ #action-panel-details button.yt-uix-button-expander { display: none; } /* Expand description (Material UI) */ #meta .ytd-watch #container .ytd-video-secondary-info-renderer #content { max-height: none; } }
Отредактировано Stkvsky (02-01-2018 19:04:25)
Отсутствует
Кто может подсказать, можно ли как-то сделать, чтобы на кнопке загрузки показывалось количество загрузок, а не время?
Я подозреваю что вам сюда — «Настройка внешнего вида Firefox в userChrome.css».
Отсутствует