Может, кто подскажет, что изменилось, в FF57 по сравнению с FF56, что все кнопки связанные с сохранением в HTML (а также сохранение в PNG (кнопка Save)) перестали работать? Единственное что здесь узнал, что nsILocalFile заменен на nsIFile.
Отсутствует
Помогите, пожалуйста. Есть кнопка, добавляющая прогресс-бар в адресной строке (код от Andrey_Krropotkin):
//Полоса загрузки в адресной строке (function(){ //Location Bar Enhancer5.1;Loading Bar0.3.0 var cssStr = (function(){/* #urlbar { background-image: -moz-repeating-linear-gradient(top -45deg, rgba(255,255,255,0), rgba(255,255,255,0) 6px, rgba(255,255,255,0) 6px, rgba(255,255,255,0) 12px), -moz-linear-gradient(left, #33FF66 0%, #33FF66 100%); background-size:0 0; background-repeat:repeat-x, no-repeat; // transition: background-size 350ms ease 0s !important; } #urlbar:not([connecting])::after { display:none; } @-moz-keyframes progress-bar-stripes { from { background-position: 0, 0; } to { background-position: 51px 0, 0; } } */}).toString().replace(/^.+\s|.+$/,""); var style = document.createProcessingInstruction("xml-stylesheet", "type=\"text/css\"" + " href=\"data:text/css;base64," + btoa(cssStr) + "\""); var mainW = document.getElementById("main-window"); document.insertBefore(style, mainW); function main(window) { var {document, gBrowser} = window; function $(id) document.getElementById(id); var urlbar = $("urlbar"); let pageProgress = 0; let async = makeWindowHelpers(window).async; var LoadingBar = { listener: { onChangeTab: function(e) { urlbar.style.backgroundSize = '0% 100%'; pageProgress = 0; }, onProgressChange: function(aBrowser,webProgress,request,curSelfProgress,maxSelfProgress,curTotalProgress,maxTotalProgress) { if (gBrowser.contentDocument === aBrowser.contentDocument) { var val = (curTotalProgress-1)/(maxTotalProgress-1); pageProgress = val; urlbar.style.backgroundSize = (100*val) + '% 100%'; if (val > 0.9) async(function() { if (pageProgress > 0.95) urlbar.style.backgroundSize = '100% 100%'; }, 1000); } }, onStateChange: function() { if (pageProgress > 0.95){ async(function() { urlbar.style.backgroundSize = '0% 100%'; pageProgress = 0; }, 1000); }else{ urlbar.style.backgroundSize = '0% 100%'; } } } }; gBrowser.tabContainer.addEventListener('TabSelect',LoadingBar.listener.onChangeTab,false); gBrowser.addTabsProgressListener(LoadingBar.listener); unload(function() { gBrowser.tabContainer.removeEventListener('TabSelect',LoadingBar.listener.onChangeTab,false); gBrowser.removeTabsProgressListener(LoadingBar.listener); }, window); } watchWindows(main, "navigator:browser"); function runOnLoad(window, callback, winType) { window.addEventListener("load", function() { window.removeEventListener("load", arguments.callee, false); if (window.document.documentElement.getAttribute("windowtype") == winType) callback(window); }, false); } function runOnWindows(callback, winType) { function watcher(window) { try { callback(window); } catch(ex) {} } let browserWindows = Services.wm.getEnumerator(winType); while (browserWindows.hasMoreElements()) { let browserWindow = browserWindows.getNext(); if (browserWindow.document.readyState == "complete") watcher(browserWindow); else runOnLoad(browserWindow, watcher, winType); } } function watchWindows(callback, winType) { function watcher(window) { try { callback(window); } catch(ex) {} } runOnWindows(callback, winType); function windowWatcher(subject, topic) { if (topic == "domwindowopened") runOnLoad(subject, watcher, winType); } Services.ww.registerNotification(windowWatcher); unload(function() Services.ww.unregisterNotification(windowWatcher)); } function unload(callback, container) { let unloaders = unload.unloaders; if (unloaders == null) unloaders = unload.unloaders = []; if (callback == null) { unloaders.slice().forEach(function(unloader) unloader()); unloaders.length = 0; return null; } if (container != null) { container.addEventListener("unload", removeUnloader, false); let origCallback = callback; callback = function() { container.removeEventListener("unload", removeUnloader, false); origCallback(); } } function unloader() { try { callback(); } catch(ex) {} } unloaders.push(unloader); function removeUnloader() { let index = unloaders.indexOf(unloader); if (index != -1) unloaders.splice(index, 1); } return removeUnloader; } function makeWindowHelpers(window) { let {clearTimeout, setTimeout} = window; function async(callback, delay) { delay = delay || 0; let timer = setTimeout(function() { stopTimer(); callback(); }, delay); function stopTimer() { if (timer == null) return; clearTimeout(timer); timer = null; } } return { async: async, }; } })();
Отсутствует
Заметил случайно на FF57 ели параметр - security.data_uri.unique_opaque_origin поставить в false, то работают кнопки с XUL интерфейсом
Отсутствует
Infocatcher Скажите пожалуйста, какие из кнопок, которые у Вас опубликованы на github.com совместимы с FF57 ( в частности интересует Custom Buttons Editor: Toggle on Top и Custom Buttons: Source Editor). С уважением к вашему труду.
Отсутствует
Скажите пожалуйста, какие из кнопок, которые у Вас опубликованы на github.com совместимы с FF57 ( в частности интересует Custom Buttons Editor: Toggle on Top и Custom Buttons: Source Editor).
Надо проверять.
Часть кнопок подправлена, часть, возможно, нет.
Custom Buttons Editor: Toggle on Top – работает вплоть до текущей Nightly 59.0a1 (2017-12-21)
Custom Buttons: Source Editor – возможно, работает, отвалится в Firefox 58 (хотя это и легко починить, но, увы, обратно-несовместимо).
В Extensions Developer Tools на Firefox 59+ не работает переключение локалей. И успел пропасть Scratchpad (и код на тему интеграции там дико упороли, генерируют XUL из JavaScript, я поизучал и бросил).
Из того, про что мне писали писал Dumby, я все подправил (распорки от security.data_uri.unique_opaque_origin внедрять не стал, лень).
Добавлено 22-12-2017 00:00:30
Custom Buttons: Source Editor – местами не работает контекстное меню, генераторы в Firefox 58+ починил.
Отредактировано Infocatcher (22-12-2017 00:00:30)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher Спасибо Вам за информацию. У меня стоит Custom Buttons 0.0.5.8.9.6pre и FF57.02 . Source Editor по вашей ссылке у меня заработал, а вот Toggle on Top - кнопка не хочет инилизироваться, постоянно в полутусклом состоянии. Вроде профиль ставил с нуля. Когда открываю и переинизилирую, значек кнопки становится нормальным, но в в редакторе значек не появляется. Кстати такая ситуация бывает и в других кнопках, но там получается так, что инициализация срабатывает, а кнопка в полутусклом состоянии, но далее при открытии и закрытии окна редактора иконка кнопок становится нормальной. Может я в не курсе, что не так не делаю, или что еще? И ту т я ранее задавал вопрос, может Вы покажите мне путь, где искать ответ , который я задал, несколько постов выше. Еще один вопрос -как изменить цвет фона редактора ( у меня после включения копки становится черным). Заранее спасибо.
Отсутствует
легко починить, но, увы, обратно-несовместимо
Ой, я когда-то всё-таки склонился к использованию аскетичного редактора,
но тут недавно как-раз понадобилось коё-что проверить, и, соответственно,
пришлось кнопку править. Значит, получается, так нельзя? (в смысле eval)
get loadOverlaysGen() { var str = "fround" in Math ? "*" : ""; // Firefox 26+ var arr = [ '(function' + str + ' loadOverlaysGen(window, callback/*, overlayData1, ...*/) {', ' var gen = loadOverlaysGen.__generator;', ' for(var i = 2, l = arguments.length; i < l; ++i) {', ' var overlayData = arguments[i];', ' this.loadOverlay(window, overlayData[0], overlayData[1], function() {', ' gen.next();', ' });', ' yield 0;', ' }', ' callback();', ' yield 0;', '});' ]; delete this.loadOverlaysGen; return this.loadOverlaysGen = eval(arr.join("\n")); },
Отсутствует
difabor пишетmssign, замените "style: "-moz-appeara...
Спасибо. Все бы хорошо, но значки не по центру панели.
скрин.скрытый текст
Попробуйте поиграться с шириной, сделайте 30px, например. У значков есть маргины и поэтому они могут не влезть.
Отредактировано difabor (22-12-2017 05:51:21)
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
Попробуйте поиграться с шириной, сделайте 30px, например. У значков есть маргины и поэтому они могут не влезть.
Тогда теряется весь смысл.. Ширина панели раздувается как раз до прежнего состояния. За исключением padding в первых строчках кода, поставил равным 0 - на пару пикселей стало уже. padding отрицательным пробовал сделать , ну не знаю я CSS. Значки стоят как привязанные и не важно им какая у панели ширина. Отступы от края всегда одни и те же. Если панель уже - значки уезжают за правый край панели.
Вот отступы по вертикали от края панели для значков понятия не имею как поправить.
скрин
Отредактировано mssign (22-12-2017 07:36:20)
Отсутствует
Как открыть файл в Scratchpad ? Нигде не найду ни примеров, ни описаний
типа такого чтоб:
var prof = Services.dirsvc.get('ProfD', Ci.nsIFile); var f1 = prof.path + "\\chrome\\userChrome.css"; var f2 = prof.path + "\\chrome\\userContent.css"; Scratchpad.openScratchpad(f1); // не правильно, запускает, но пустым.
GM для PM это как-то делает - все скрипты открываются по ПКМ в Scratchpad-e . Но там столько всего, я понять не могу КАК?!
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
На форуме
difabor пишетПопробуйте поиграться с шириной, сделайте 30px, например. У значков есть маргины и поэтому они могут не влезть.
Тогда теряется весь смысл.. Ширина панели раздувается как раз до прежнего состояния. За исключением padding в первых строчках кода, поставил равным 0 - на пару пикселей стало уже. padding отрицательным пробовал сделать , ну не знаю я CSS. Значки стоят как привязанные и не важно им какая у панели ширина. Отступы от края всегда одни и те же. Если панель уже - значки уезжают за правый край панели.
Вот отступы по вертикали от края панели для значков понятия не имею как поправить.
1. 30px всё-таки будет имхо у́же.
2. Надо маргинам иконок присвоить отрицательные значения.
Но это надо указывать не в этой кнопке, а в CSS, например, в Classic Theme Restorer.
#ButtonID {margin-left: -6px !important;margin-right: -4px !important;}
ButtonID - ИД значка
Особенно это важно для значков с дропмаркерами, например:
#tileview-buttonmenu>dropmarker,#textareaCacheButton>dropmarker,#printedit-buttonmenu>dropmarker,#s3gt-toolbar-button>dropmarker{margin-left: -9px !important;margin-right: -9px !important;}
Видите, можно сразу перечислить несколько ИД через запятую и с # перед ИД.
Вот как у меня выглядит кусок VT:
Отредактировано difabor (22-12-2017 07:49:39)
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
mokujin пишет: var prof = Services.dirsvc.get('ProfD', Ci.nsIFile); var f1 = prof.path + "\\chrome\\userChrome.css"; var f2 = prof.path + "\\chrome\\userContent.css"; Scratchpad.openScratchpad(f1); // не правильно, запускает, но пустым.
скорее всего там нужен сам файл а не путь
т.е после получения пути надо сделать file init with path
точнее глянь в кодах открывающих папку или запускающих файл
(да я ленивый зато найдя сам лучше запомнишь)
я помню те времена когда обновления программ убирали проблемы и исправляли баги, а не добавляли их.
toxID:05AB9B827D896AACEE7FF4573A02FB8F025F46ADC856B98F65BC1BA9BD21A81DC98BA9C36CE3
Отсутствует
а вот Toggle on Top - кнопка не хочет инилизироваться, постоянно в полутусклом состоянии.
В консоли ошибок по Ctrl+Shift+J должно чего-нибудь на тему выводить.
как изменить цвет фона редактора ( у меня после включения копки становится черным).
F12 – шестеренка – темы
Или в about:config:
devtools.theme = light
devtools.theme = dark
Значит, получается, так нельзя? (в смысле eval)
Ну да... строковые портянки. Я в другой своей штуке в итоге сделал подргузку нужного кода через loadSubScript().
Вот так чуть поприятнее смотрится: https://github.com/Infocatcher/Custom_B … 7b574412ec
Добавлено 22-12-2017 10:43:47
что изменилось, в FF57 по сравнению с FF56, что все кнопки связанные с сохранением в HTML (а также сохранение в PNG (кнопка Save)) перестали работать? Единственное что здесь узнал, что nsILocalFile заменен на nsIFile.
Тут, опять же, должна быть ругань в консоли ошибок.
Отредактировано Infocatcher (22-12-2017 10:43:47)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher спасибо за ответы. Я разобрался. Все работает.
В консоли, при включенном Source Editor на редактирование любой кнопки (даже если просто открыл и закрыл) пишет
Отредактировано Andrey_Krropotkin (22-12-2017 12:07:03)
Отсутствует
скорее всего там нужен сам файл а не путь
мда... ЕЯПП то чтоб открыть файл, ему надо передать содержимое файла, имя и какое-то состоянияния, чтоле... Нашел такой кусок в GM(for PM)
function openInEditor(aScript) { let editor = GM_util.getEditor(); if (!editor) { // Without DevTools. try { ScratchpadManager.openScratchpad({ "filename": aScript.file.path, "text": aScript.textContent, "saved": true, }); } catch (e) { if (GM_util.setEditor(0)) { openInEditor(aScript); } } return undefined; } ...... ну и дальше for MacOS проверки
const EXPORTED_SYMBOLS = ["getScriptSource"]; // Given a script, return its entire source as a plain string. function getScriptSource(aScript) { let parts = []; let offsets = []; let offset = 0; aScript.requires.forEach(function (aReq) { let contents = aReq.textContent; let lineCount = contents.split("\n").length; parts.push(contents); offset += lineCount; offsets.push(offset); }); aScript.offsets = offsets; // These newlines are critical for error line calculation. // The last handles a script whose final line is a line comment, // to not break the wrapper function. // See #1491. // The semicolons after requires fix a failure of javascript's semicolon // insertion rules. parts.push(aScript.textContent); let scriptSrc = parts.join(";\n") + "\n"; return scriptSrc; }
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
На форуме
открывать кнопки на редактирование в Scratchpad , т.к. он уже есть, подсветка есть
Это как подсветку синтаксиса можно встроить... через 10 костылей, 15 распорок и ломаться буде раз в две версии.
Содержимое файла надо читать вручную...
var path = "c:\\autoexec.bat"; OS.File.read(path).then(function(arr) { var {ScratchpadManager} = Components.utils.import("resource://devtools/client/scratchpad/scratchpad-manager.jsm", {}); ScratchpadManager.openScratchpad({ filename: path, text: new TextDecoder().decode(arr), saved: true }); });
А еще scratchpad-manager.jsm уже как минимум один раз переезжал, раньше он был в resource:///modules/devtools/scratchpad-manager.jsm
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Ага, точно так. нашел в GM файлах, аж четыре проверки на четыре разных пути к scratchpad-manager.jsm В моём случае подошел путь под нумером 1 (PM жеж не сильно меняли)
Теперь всё пойдёт веселей.
/*CODE*/ // открыть userChrome.css во встроенном редакторе Scratchpad function spUChrom() { const prof = Services.dirsvc.get('ProfD', Ci.nsIFile); var path = prof.path + "\\chrome\\userChrome.css"; OS.File.read(path).then(function(arr) { // Firefox путь до Scratchpad, подставить нужное // resource://devtools/client/scratchpad/scratchpad-manager.jsm // // Moved in Firefox 44 // http://hg.mozilla.org/mozilla-central/rev/397c69fa1677 // resource:///modules/devtools/client/scratchpad/scratchpad-manager.jsm // // Moved in Firefox 44 // http://hg.mozilla.org/mozilla-central/rev/3b90d45a2bbc // resource:///modules/devtools/scratchpad-manager.jsm // PaleMoon 27 путь до Scratchpad var {ScratchpadManager} = Components.utils.import("resource://gre/modules/devtools/scratchpad-manager.jsm", {}); ScratchpadManager.openScratchpad({ filename: path, text: new TextDecoder().decode(arr), saved: true }); }); }; spUChrom();
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
На форуме
Можно ли "виртуально" увеличить площадь кнопки?
Вот, например, есть классная кнопка Изменить масштаб.
Если на нее навести курсор и крутить колесико, то происходит изменение масштаба.
Но площадь "действия" кнопки маловата для меня и приходится тратить внимание на прицеливание курсором.
Нельзя ли расширить область срабатывания так, чтоб она, например, распространялась на всю верхнюю панель (там где названия вкладок)?
Тогда было бы гораздо проще -- махнул не глядя курсором к верхней границе окна и крути себе масштаб.
Отсутствует
usalex
Поставьте кнопку и не мучайтесь. Масштаб изменяется колёсиком при нажатой ПКМ, и никуда целиться не нужно.
https://forum.mozilla-russia.org/viewtopic.php?pid=733919#p733919
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
Отсутствует
oleg.sgh
Спасибо.
Там в коде адресная строка обозначена, как "gURLBar"
А, может, есть аналогичное обозначение для самой верхней панели - той, в которой вкладки с их названиями отображаются?
villa7
Да! Спасибо! Поставил эту кнопку и теперь намного удобней крутить масштаб.
Старую кнопку изменения масштаба удалил, но вместе с ней исчезла индикация процентов масштаба из строки адреса.
Можно её как-то вернуть?
Отредактировано usalex (23-12-2017 19:05:13)
Отсутствует
Помогите пожайлуста разобраться, что-то запутался в коде
// Пукт меню - ["В другом профиле", "menuitem-iconic", icon3, "ucjs_Cop.Debug();"], var profileDir = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("GreD", Components.interfaces.nsIFile) .path; var fpath = profileDir + "\\firefox.exe"; window.ucjs_Cop = { clipboard: Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper), Debug: function() { var urllink=window._content.document.location.href; startProcess(fpath,["-no-remote","-P","Debug",urllink]); function startProcess(path, args){ file.initWithPath(path); if(file.exists()){ var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); process.init(file); process.run(false, args, args.length);} }; }, };
Отсутствует
ссылается на строчку
Это сломали где-то с Firefox 54. Из консоли ошибка передаётся
на пару строк дальше, чем на самом деле. Думалось, что само пройдёт, но нет.
В консоли пишет "window._content is undefined"
что-то запутался в коде
Ну, наверно, следует отталкиваться от чего-нибудь менее запутанного.
А запутать и доработать всегда успеется.
function openInProfile(profileName, url = gBrowser.currentURI.spec) { var firefox = Services.dirsvc.get("XREExeF", Ci.nsIFile); var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); var args = ["-no-remote", "-p", profileName, url]; process.init(firefox); process.run(false, args, args.length); } openInProfile("Debug");
Отсутствует