Добрый день. Вопрос из ветки "CSS-стили" , так как там нет ответа , может специалисты из этой ветки помогут. Возможно решить задачу? Установил код "прокрутка "панели закладок" ,работает, но есть нюанс. Прокрутка "панели закладок" происходит не по горизонтали как рулетка , а вертикально как барабан. Необходимо что бы прокрутка была как рулетка при переполнении "панели закладок", по типу прокрутки колёсиком мыши "панели вкладок" . Заранее спасибо
@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); #navigator-toolbox > toolbar:not(#toolbar-menubar):not(#TabsToolbar):not(#nav-bar):not(#addon-bar) { max-height: none !important; } toolbar > #personal-bookmarks { display: block !important; line-height: 0px !important; } toolbar > #personal-bookmarks > #PlacesToolbar { display: block !important; min-height: 0px !important; overflow-x: hidden !important; overflow-y: auto !important; max-height: 26px !important; /* Максимальная высота закладок*/ } toolbar > #personal-bookmarks > #PlacesToolbar > hbox { display: -moz-stack; margin-left: 0px; margin-right: 0px; width: 100%; } toolbar > #personal-bookmarks > #PlacesToolbar #PlacesToolbarItems { overflow-x: visible !important; overflow-y: visible !important; } toolbar > #personal-bookmarks > #PlacesToolbar #PlacesToolbarItems > box { display: block !important; } toolbar > #personal-bookmarks > #PlacesToolbar .chevron { display: none !important; } toolbar > #personal-bookmarks > #PlacesToolbar > hbox > hbox { overflow-x: hidden; overflow-y: hidden; } toolbar > #personal-bookmarks > #PlacesToolbar #PlacesToolbarDropIndicator { height: 12px !important; } toolbar > #personal-bookmarks > #PlacesToolbar #PlacesToolbarDropIndicator[collapsed="true"] { display: none; } toolbar > #personal-bookmarks > #PlacesToolbar toolbarbutton.bookmark-item { padding-top: 3px !important; padding-bottom: 2px !important; padding-left: 3px !important; padding-right: 3px !important; visibility: visible !important; } toolbar > #personal-bookmarks > #PlacesToolbar toolbarseparator { -moz-appearance: none !important; display: inline; text-shadow: none !important; position: relative; top: 4px; vertical-align: text-top; } toolbar > #personal-bookmarks > #PlacesToolbar toolbarbutton.bookmark-item[dragover][open] { -moz-appearance: toolbarbutton; }
Отредактировано Duche (21-06-2018 08:05:36)
Отсутствует
oleg.sghВыделить кодКод/ Открывать любую новую вкладку справа от текущей, от 25.11.2015. ................................
addEventListener("TabOpen", (e)=> {
var newTab = e.target,
tabpos = gBrowser.selectedTab._tPos,
err = new Error().stack;// если восстановление сессии или открыть всё во вкладках из папки закладок
if ( /ssi_restore|openContainer/.test(err) ) return;/undoCloseTab/.test(err)
? setTimeout(()=> gBrowser.moveTabTo(newTab, tabpos + 1), 50) // если восстановление вкладки
: gBrowser.moveTabTo(newTab, tabpos + 1);}, false, gBrowser.tabContainer );
Отредактировано bunda1 (26-11-2015 01:23:51)
подскажите как это добавить в Firefox?
не получается даже добавить Сustom Buttons в Firefox, пишет не для этой версии.
может руки кривые !
Отредактировано muxtair (21-06-2018 08:16:42)
Отсутствует
bunda1 пишет// Открывать любую новую вкладку справа от текущей, от 25.11.2015. ................................
addEventListener("TabOpen", (e)=> {
var newTab = e.target,
tabpos = gBrowser.selectedTab._tPos,
err = new Error().stack;// если восстановление сессии или открыть всё во вкладках из папки закладок
if ( /ssi_restore|openContainer/.test(err) ) return;/undoCloseTab/.test(err)
? setTimeout(()=> gBrowser.moveTabTo(newTab, tabpos + 1), 50) // если восстановление вкладки
: gBrowser.moveTabTo(newTab, tabpos + 1);}, false, gBrowser.tabContainer );
подскажите как это добавить в Firefox?
не получается даже добавить Сustom Buttons в Firefox, пишет не для этой версии.
может руки кривые !
Этот код нужно добавить в - C:\Firefox\profile!!!!!!\chrome\userChrome.css...
Надеюсь в путях понимайте? в файл - userChrome.css, в профиле - Firefox.
Смотря какая у вас портабельная или нет, если установочная то другой путь...
Отредактировано func4ptch4 (21-06-2018 11:50:35)
Отсутствует
Этот код нужно добавить в - C:\Firefox\profile!!!!!!\chrome\userChrome.css...
Не вводите товарищей в заблуждение
muxtair, для начала нужно установить расширение Custom Buttons. Описание добавления новых кнопок есть здеся - https://forum.mozilla-russia.org/viewto … 91#p397691
Отсутствует
func4ptch4 пишетЭтот код нужно добавить в - C:\Firefox\profile!!!!!!\chrome\userChrome.css...
Не вводите товарищей в заблуждение
muxtair, для начала нужно установить расширение Custom Buttons. Описание добавления новых кнопок есть здеся - https://forum.mozilla-russia.org/viewto … 91#p397691
не могу поставить Custom Buttons, делал по инструкции.
Отредактировано muxtair (21-06-2018 14:38:05)
Отсутствует
muxtair
Попробуйте версию конфигурационного кода отсюда: https://forum.mozilla-russia.org/viewto … 90#p757890
А Custom Buttons отсюда: https://forum.mozilla-russia.org/viewto … 96#p755496
«The Truth Is Out There»
Отсутствует
muxtair, А точно нужен CustomButtons, можете скачать мою сборку там настроено.
Ссылку кидал на прошлой странице.
Отсутствует
muxtair
Попробуйте версию конфигурационного кода отсюда: https://forum.mozilla-russia.org/viewto … 90#p757890
А Custom Buttons отсюда: https://forum.mozilla-russia.org/viewto … 96#p755496
Добавлено 21-06-2018 15:38:44
muxtair, А точно нужен CustomButtons, можете скачать мою сборку там настроено.
Ссылку кидал на прошлой странице.
скачал Вашу сборку, так же открывается новая вкладка в конце. Мне нужно за текущей.
Отредактировано muxtair (21-06-2018 15:38:44)
Отсутствует
muxtair
Проверьте ещё в about:config параметры:
extensions.legacy.enabled - true
xpinstall.signatures.required - false
«The Truth Is Out There»
Отсутствует
muxtair, Теперь создайте кнопку и в инициализацию кладете свой код, который вам дали... я под вас спецом перезаливать не собираюсь.
Там установлен CB, что там проверять? просто если элементарное не знать трудно, даже не знаю как обьяснить уже.
Отсутствует
У меня эти костыли работают http://my-files.ru/gd63tb
Отредактировано Garalf (22-06-2018 16:55:23)
На форуме
Garalf
Так работает CB ?
Костыли мне до фени.Там сама CB подрихтована и встала без проблем. Есть минус в этой 61 у cento8 брал. Пропускает youtube в хранилище, при выкл. storage...
Это где-то в media зарыто....
Исправил, толку....Попадали старые аддоны, "наверное неисправно" , костыли не тянут.
Отредактировано drage2 (23-06-2018 12:10:50)
Отсутствует
«Merge Day!». Скину, пожалуй, свой расклад.
custom_buttons-0.0.5.9.0.1-fx.xpi
Рестарт, как всегда, нужен, хоть это нигде и не отображается в интерфейсе.
// try {(code => { var {classes: Cc, interfaces: Ci, utils: Cu} = Components; var jsval, evl = true, re = e => Cu.reportError(e), imp = name => {try { return Cu.import(`resource://gre/modules/addons/${name}.jsm`, {}); } catch(ex) {}} if ((jsval = imp("AddonSettings"))) { jsval.AddonSettings = {ADDON_SIGNING: false, REQUIRE_SIGNING: false, ALLOW_LEGACY_EXTENSIONS: true}; try {evl = jsval.eval("this") === jsval;} catch(ex) {evl = false;} } var jsvals = ["XPIProvider", "XPIInstall"].map(imp).filter(i => i); jsvals[0].AddonSettings && lockPref("extensions.allow-non-mpc-extensions", true); jsvals[0].signaturesNotRequired = true; if (evl) return jsvals.forEach(jsval => {try {jsval.eval(code);} catch(ex) {re(ex);}}); var sl = Cc["@mozilla.org/moz/jssubscript-loader;1"].getService(Ci.mozIJSSubScriptLoader); Cu.importGlobalProperties(["URL", "Blob"]); var url = URL.createObjectURL(new Blob([(code)])); jsvals.forEach(jsval => {try {sl.loadSubScript(url, jsval);} catch(ex) {re(ex);}}); })(String.raw`((vzss, pckg) => { var trueDesc = {enumerable: true, value: true}; typeof Extension == "function" && Object.defineProperty(Extension.prototype, "experimentsAllowed", trueDesc); "AddonInternal" in this && Object.defineProperty(AddonInternal.prototype, "providesUpdatesSecurely", trueDesc); this.isDisabledLegacy = () => false; if ("XPIDatabase" in this) this.XPIDatabase.isDisabledLegacy = () => false; try {SIGNED_TYPES.clear();} catch(ex) {}; if (!vzss && !pckg) return; var re = /\x06\x03U\x04\x03\x14[\s\S](\{[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\}|[a-z0-9-\._]*\@[a-z0-9-\._]+)0\x82\x02"0\r\x06\t/i; var getUUID = () => { var gen = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator); return (getUUID = () => gen.generateUUID().toString())(); } var getIdFromString = str => { var match = str && str.match(re); return match ? match[1] : getUUID(); } var getState = arg => ({ signedState: AddonManager.SIGNEDSTATE_NOT_REQUIRED, cert: typeof arg == "object" ? arg : {commonName: arg} }); var checkAddon = addon => { if (addon.id || ( "_installLocation" in addon ? addon._installLocation.name == KEY_APP_TEMPORARY : addon.location.isTemporary )) return getState(null); } var getRoot = () => !AppConstants.MOZ_REQUIRE_SIGNING && Services.prefs.getBoolPref(PREF_XPI_SIGNATURES_DEV_ROOT, false) ? Ci.nsIX509CertDB.AddonsStageRoot : Ci.nsIX509CertDB.AddonsPublicRoot; if (vzss) { var getURI = file => { var jsval = Cu.import("resource://gre/modules/addons/XPIProvider.jsm", {}); return (getURI = file => jsval.getURIForResourceInFile(file, "META-INF/mozilla.rsa"))(file); } var getIdFromFile = file => { var str, is = {close() {}}, sis = {close() {}}; try { is = Services.io.newChannelFromURIWithLoadInfo(getURI(file), null).open(); sis = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream); sis.init(is); str = sis.readBytes(sis.available()); } catch(ex) {} sis.close(); is.close(); return getIdFromString(str); } this.verifyZipSignedState = function verifyZipSignedState(aFile, aAddon) { var res = checkAddon(aAddon); return res ? Promise.resolve(res) : new Promise(resolve => { var callback = {openSignedAppFileFinished(rv, zipReader, cert) { zipReader && zipReader.close(); resolve(getState(cert || getIdFromFile(aFile))); }}; gCertDB.openSignedAppFileAsync(getRoot(), aFile, callback.wrappedJSObject = callback); }); } } if (pckg) Package.prototype.verifySignedState = function verifySignedState(addon) { var res = checkAddon(addon); return res ? Promise.resolve(res) : new Promise(resolve => this.verifySignedStateForRoot(addon, getRoot()).then(({cert}) => { if (cert) resolve(getState(cert)); else this.readBinary("META-INF", "mozilla.rsa").then( buffer => resolve(getState( getIdFromString(String.fromCharCode(...new Uint8Array(buffer))) )), () => resolve(getState(getUUID())) ); }, Cu.reportError) ); } })( "verifyZipSignedState" in this, typeof Package == "function" );`)} catch(err) { err.message != "Components is not defined" && Components.utils.reportError(err); }
Используйте кодировку без BOM или поставьте первым символом точку с запятой [;]
Однако, по моим наблюдениям, Firefox, при запуске, не проверяет
расширения и WebExtensions, но добавляет таймер проверки.
А nsIUpdateTimerManager предоставляет на лечение отсрочку в две минуты.
Этого вполне достаточно чтобы запустить конфигурационный код
другим способом, например, через userChrome.css
Так и сделал. Пока, вроде, полёт нормальный.
Если эта концепция верна и не изменится в дальнейшем,
то расширения смогут просуществовать влоть до
самого́ существования расширений как таковых.
Отсутствует
Если эта концепция верна и не изменится в дальнейшем,
то расширения смогут просуществовать влоть до
самого́ существования расширений как таковых.
ой, не сглазь! ттт
Отсутствует
Dumby
есть другая проблема. Начиная с 61 напрочь падают xul аддоны без подписи....К, примеру , Newsfox ... В 60 -запросто, в 61 - пишет "повреждено".....
Так происходит и с моими "костылями" и с вашими....Печалька...Теперь надо лепить bootstrap.js , это муторно.
Отредактировано drage2 (26-06-2018 01:03:11)
Отсутствует
А можно с помощью CB менять горячие клавиши?
например команду "Вставить и перейти"
BrowserOpenTab(); gURLBar.select(); goDoCommand('cmd_paste'); gURLBar.handleCommand();
Создать кнопку, задать для неё горячую клавишу...
«Merge Day!». Скину, пожалуй, свой расклад.
Превосходно, спасибо огромное!
Отсутствует
Аддоны web итак устанавливаются . xul аддоны, начиная с 61 - нет!!! И никакие костыли не помогут.
Одного доведенного до ума CB мало. Тем более половина кнопок падает и без мультирежима. Больше никакой радости нет и не будет
Оптимисты с огромными глазами станут банальными реалистами.
Dumby пишет:
Если эта концепция верна и не изменится в дальнейшем,
то расширения смогут просуществовать влоть до
самого́ существования расширений как таковых.
Ха, толку от этого? См.выше. "Оставь надежду, всяк сюда входящий"!
Отредактировано drage2 (27-06-2018 14:13:32)
Отсутствует
Рестарт, как всегда, нужен, хоть это нигде и не отображается в интерфейсе.
Понадобилось даже два рестарта.
Но что интересно: при переходе с 59 на 60 неработоспособны оказались около четверти кнопок.
Сейчас же все пять десятков работают как надо, словно и обновления не было.
Отсутствует
Подскажите, как в CB получить содержимое текущей страницы? Раньше был content.document и можно было, например, выполнить content.document.getElementsByTagName('link'); и получить список ссылок. Сейчас (FF 61, CB 0.0.5.9.0.1) content (window.content) имеет значение null. Плиз!
Отсутствует
Подскажите код "Открыть выделенное как ссылку"
Что-то не получается этот код с readFromClipboard() приспособить под getSelection:
const IN_NEW_TAB = true; const IN_BACKGROUND = false; var str = readFromClipboard(); if (!str) return; if (IN_NEW_TAB) gBrowser.loadOneTab(str, null, null, null, IN_BACKGROUND, false); else gBrowser.loadURI(str);
Отредактировано thrower (28-06-2018 16:53:06)
Отсутствует
Если эта концепция верна
Не совсем верна. Как минимум, расширения выключаются
сразу после старта браузера в том случае, если изменился номер версии Firefox.
А CB/WE, вообще намечается?
Не намечается и не может намечаться. CB и WE не имеют друг к другу
никакого отношения, и, даже, в каком-то смысле, они противоположны.
А если Ctrl+N всё ещё раздражает, то положи во вкладку Инициализация
addEventListener("keydown",e=>e.ctrlKey&&e.code=="KeyN"&&!e.shiftKey&&!e.altKey&&e.preventDefault()+BrowserOpenTab());
content (window.content) имеет значение null
Ну как же в голове не умещается одна простая мысль, что content'а здесь нет.
content находится в другом, дочернем процессе. А кнопка находится в главном,
родительском процессе, и у процессов нет никаких общих объектов.
Кнопка может лишь попросить нужные инстанции главного процесса
загру(зи|жа)ть в дочерний процесс скрипт. Вот, например, самый простой случай.
Положи во вкладку Код и нажимай, заодно узнаешь как правильно называется то,
что возвращает метод getElementsByTagName()
var code = ` var result = content.document.getElementsByTagName('link'); content.alert( result + "\\n\\nLength: " + result.length ); `; var url = "data:," + encodeURIComponent(code); gBrowser.selectedBrowser.messageManager.loadFrameScript(url, false);
Что-то не получается этот код с readFromClipboard() приспособить под getSelection
Если имеется в виду выделенное на странице, то, как вариант
const IN_NEW_TAB = true; const IN_BACKGROUND = false; function loadStr(str) { if (!str) return; if (IN_NEW_TAB) gBrowser.loadOneTab(str, null, null, null, IN_BACKGROUND, false); else gBrowser.loadURI(str); } var msgName = "CB:StringLoader:ContentSelection"; var code = ` var fw = {}, fe = Services.focus.getFocusedElementForWindow(content, true, fw); var sel = fe && fe.editor ? fe.editor.selectionController .getSelection(Ci.nsISelectionController.SELECTION_NORMAL) : fw.value.getSelection(); sendAsyncMessage("${msgName}", sel.toString()); `; var mm = gBrowser.selectedBrowser.messageManager; var listener = msg => { mm.removeMessageListener(msgName, listener); loadStr(msg.data.trim()); } mm.addMessageListener(msgName, listener); mm.loadFrameScript("data:," + encodeURIComponent(code), false);
Отсутствует