не получилось добавить setTimeout(… в скрипты scriptsbackground
Не понял.
Скрипты scriptsbackground исполняются в специально созданном Sandbox'е
и setTimeout() туда уже добавлен самим UCF посредством импорта модуля
resource://gre/modules/Timer.jsm (или не .jsm, а .sys.mjs, зависит от версии FF).
Даже попробовал проверить: в scriptsbackground — { path: "test_timeout.js" },
в test_timeout.js — setTimeout(Services.prompt.alert, 7777, null, "title", "message");
Запускаю браузер, и таймаут, определённо, есть.
Отредактировано Dumby (16-07-2023 17:59:00)
Отсутствует
Скрипты scriptsbackground исполняются в специально созданном Sandbox'е и setTimeout() туда уже добавлен самим UCF
в JSM это не работает. Есть другой способ JSM подключать в CustomStylesScripts.jsm? Как добавить setTimeout в JSM?
var jsmImport = name => `ChromeUtils.import("chrome://user_chrome_files/content/custom_scripts/${name}")`; …………… scriptsbackground: [ // В фоне [System Principal] { path: "test_timeout.jsm" }, // только здесь setTimeout работает { func: jsmImport("test_timeout.jsm"), }, // не пашет ✕✖✘
Dumby ещё вопрос: А возможно сделать доступными из начала скрипта несколько функций, прописанных в блоке (async (id) => {}) ?
Чисто для лучшей читабельности хочу в начало скрипта код нажатий кнопок keydown_win = e => {, который в конце…
key_data = e => log(e.keyCode); // не работает log(…), так как он расположен в (async (id… перед keydown_win…
Однако функции, прописанные после keydown_win…, доступны, если их прописать в начало скрипта.
var hmap = new Map([["downloads-button", `колёсико ⬇︎ папка [Загрузки]`]]); // +++ код >>> data = { // клавиши и события мыши в начале скрипта для лучшего восприятия "#downloads-button": { 1() {save()}, // +++ код >>> }}; key_data = e => { // перехват клавиш в начале скрипта для лучшего восприятия log(e.keyCode); // ✕✖✘ недоступны функции из блока (async (id, func) => { }; // +++ код >>> (async (id, func) => { // +++ код основные функции >>> var dsym = Symbol(), tooltips = { [dsym]: GetDynamicShortcutTooltipText("downloads-button") + "\n" + hmap.get("downloads-button"), // +++ код >>> get "downloads-button"() { } var log = (msg) => { Services.console.logStringMessage(msg); }, keydown_win = e => { // перехват клавиш key_data(e); // не работает ✕✖✘ // +++ код >>> } window.addEventListener("keydown", keydown_win); // +++ код >>> })("hookClicks-and-tooltips");
Отредактировано Dobrov (17-07-2023 08:51:53)
Отсутствует
Упростил скрипт перехвата кнопок/ролика мыши и нажатий клавиш ucf_hookClicks.js
Блок обработки клавиш теперь в начале скрипта – аналогично подсказкам и действиям мыши.
Настраивать стало удобнее, код выглядит примерно так:
var keys = { // перехват клавиш Meta 8 Ctrl 4 Shift 2 Alt 1
KeyS_1(e) { save()}, // S+Alt
KeyX_5(e) { userjs(e)}, // X+Alt+Ctrl
}
Если включена отладка, в консоли видно нажатия мыши и сочетания клавиш.
Флаг отладки есть в диалоге настройки UserChromeFiles моего профиля
Отсутствует
Dobrov
Вопрос, могу ли я перенести все отсюда, сюда в var keys = {}. По идее можно, просто думаю, а если в полях ввода будет мешаться код. С дефолтными клавищами, можно также e.preventDefault(); впереди? Просто не совсем представляю, как должно все выглядеть. А для чего userj(e), а где-то просто ()? За что отвечает (e). Да знаю, совсем ноль в этом. Просто потребитель) Спасибо за полезности, и Dumby за помощь.
Отредактировано b0ttle (17-07-2023 13:57:01)
Отсутствует
b0ttle - userj(e) - внешний скрипт пользователя
Вопрос, могу ли я перенести все отсюда, сюда в var keys = {}.
нет, переноси код ручками - видно же, что синтаксис разный:
у тебя: "KeyG":{"true_false_false" ……
у меня: KeyS_1(e) { save()}, // S+Alt
Отсутствует
Dobrov
Вопрос больше про "this.skip". Он не будет выполнять код в полях ввода, адресной строке? Или, можно отдельно в начало кода добавить, что-то наподобие e.preventDefault(); Чтобы, лишнего кода не добавлять. Еще вопрос, про (е)/() в чем разница, это клик event? Переносить также с (е)?.
Перенес так, но некоторые срабатывают в полях ввода. Пришлось пока закомментить.
keyboard = { // нажатия клавиш Meta 8 Ctrl4 Shift2 Alt1 KeyS_1(e) { save()}, // S+Alt KeyS_3(e) { // S+Alt+Shift var single = document.getElementById(hmap.get("#").split('|')[10]); single ? single.click() : save(); // имитировать клик кнопки }, KeyS_5(e) { saveSelectionToTxt();}, // S+Alt+Ctrl KeyX_1(e) { userjs(e)}, // X+Alt внешний скрипт KeyQ_5(e) { // Q+Alt+Ctrl CleanCache - Перезапустить, удалив кэш var cancelQuit = Cc["@mozilla.org/supports-PRBool;1"].createInstance(Ci.nsISupportsPRBool); Services.obs.notifyObservers(cancelQuit, "quit-application-requested", "restart"); if (cancelQuit.data) return false; Services.appinfo.invalidateCachesOnRestart(); var restart = Services.startup; restart.quit(restart.eAttemptQuit | restart.eRestart);}, //============ get skip(){return docShell.isCommandEnabled("cmd_insertText");}, Backquote(){this.skip||PlacesCommandHook.showPlacesOrganizer("BookmarksMenu").click();}, Digit1(){this.skip||document.getElementById("unified-extensions-button").click();}, Digit2(){this.skip||BrowserOpenAddonsMgr();}, Digit3(){this.skip||openPreferences();}, Digit4(){this.skip||duplicateTabIn(gBrowser.selectedTab,'tab');}, Digit5(){if(this.skip)return;var s=prompt('Google_ site:.. ..','');if(s.length>0)gBrowser.addTrustedTab('https://www.google.com/search?q=site:'+encodeURIComponent(gBrowser.currentURI.host)+' '+encodeURIComponent(s));}, Digit6(){if(this.skip)return;var p=Services.dirsvc.get('GreD',Ci.nsIFile);p.initWithPath(p.path+"\\..\\..\\..\\_Photo\\ShareX\\ShareX.exe");p.launch();}, Digit7(){if(this.skip)return;gBrowser.fixupAndLoadURIString("javascript:(function(){var EnRuT=[['щ','shh'],['Щ','Shh'],['Щ','SHH'],['х','hh'],['Х','Hh'],['Х','HH'],['ж','zh'],['Ж','Zh'],['Ж','ZH'],['ц','cz'],['Ц','Cz'],['Ц','CZ'],['ю','yu'],['Ю','Yu'],['Ю','YU'],['ё','yo'],['Ё','Yo'],['Ё','YO'],['я','ya'],['Я','Ya'],['Я','YA'],['ч','ch'],['Ч','Ch'],['Ч','CH'],['ш','sh'],['Ш','Sh'],['Ш','SH'],['э','e`'],['Э','E`'],['ы','y'],['Ы','Y'],['ъ','``'],['ь','`'],['р','r'],['т','t'],['у','u'],['и','i'],['о','o'],['п','p'],['а','a'],['с','s'],['д','d'],['ф','f'],['г','g'],['й','j'],['к','k'],['л','l'],['з','z'],['х','x'],['ц','c'],['в','v'],['б','b'],['н','n'],['м','m'],['Р','R'],['Т','T'],['У','U'],['И','I'],['О','O'],['П','P'],['А','A'],['С','S'],['Д','D'],['Ф','F'],['Г','G'],['Й','J'],['К','K'],['Л','L'],['З','Z'],['Х','X'],['Ц','C'],['В','V'],['Б','B'],['Н','N'],['М','M'],['е','e'],['Е','E']],A=document.activeElement;A.onkeyup=function ftr(){for(var s=A.value,i=0;i<EnRuT.length;i++){s=s.replace(RegExp(EnRuT[i][1],'g'),EnRuT[i][0])};A.value=s}})()",{triggeringPrincipal:gBrowser.contentPrincipal}); },//AutoTranslit- https://forum.ru-board.com/topic.cgi?forum=5&topic=46779&start=320#15 F1(){FileUtils.getFile('SysD',['sndvol.exe']).launch();}, F2(e){e.preventDefault();gBrowser.fixupAndLoadURIString("javascript:{d=document;b=d.body;o=d.createElement('scri'+'pt');o.setAttribute('src','https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit');o.setAttribute('type','text/javascript');b.appendChild(o);v=b.insertBefore(d.createElement('div'),b.firstChild);v.id='google_translate_element';v.style.display='none';p=d.createElement('scri'+'pt');p.text='function googleTranslateElementInit(){new google.translate.TranslateElement({pageLanguage:%22%22},%22google_translate_element%22);}';p.setAttribute('type','text/javascript');b.appendChild(p);}void 0",{triggeringPrincipal:gBrowser.contentPrincipal}); },//Enable translation(https://forum.mozilla-russia.org/viewtopic.php?pid=805422#p805422 ||805427#p805427) F3(e){e.preventDefault();gBrowser.fixupAndLoadURIString("javascript:(function(){var night=function(w){(function(d){var css='html{opacity:0.6!important;background:black!important;}body{background:white!important;}';var s=d.getElementsByTagName('style');for(var i=0,si;si=s[i];i++){if(si.innerHTML==css){si.parentNode.removeChild(si);return}};var heads=d.getElementsByTagName('head');if(heads.length){var node=d.createElement('style');node.type='text/css';node.appendChild(d.createTextNode(css));heads[0].appendChild(node)}})(w.document);for(var i=0,f;f=w.frames[i];i++){try{arguments.callee(f)}catch(e){}}};night(window)})();",{triggeringPrincipal:gBrowser.contentPrincipal}); },//Night mode(Focus mode) F4(){var vert=`javascript:{const o=["contextmenu","selectstart","select","mousedown","mouseup","cut","copy"],t=["-webkit","-moz","-ms","-khtml",""],e=window.jQuery;[document,document.body,document.documentElement].forEach(n=>{for(const t of o)n["on"+t]=null,e&&e(n).off(t);if(n.style)for(const o of t){const t=[o,"user-select"].join("-");n.style[t]="initial"}}) };void(0);`;gBrowser.loadURI(Services.io.newURI(vert),{triggeringPrincipal:Services.scriptSecurityManager.getSystemPrincipal()}); },//Re-enable selecting & copying text [maple3142] (Bookmarklet) KeyG_4(e){e.preventDefault();var bar=document.getElementById("ucf-additional-vertical-bar");setToolbarVisibility(bar,bar.collapsed);}, KeyW_1(){gBrowser.removeAllTabsBut(gBrowser.selectedTab);}, KeyV(){if(this.skip)return;gClipboard.write(gURLBar.value);glob.flash_bg_text('urlbar-input-container',0,'rgba(240,176,0,0.5)',300);},//300,"CopyURL: "+gURLBar.value.slice(0,80)) KeyV_1(){let url=readFromClipboard();try{switchToTabHavingURI(url,true);}catch(ex){ var reg=/[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?/; if(!reg.test(url)){url='https://www.google.com/search?q='+encodeURIComponent(url); }else{if(url.substring(4,0).toLowerCase()=="http"){url=encodeURIComponent(url); }else{url='http://'+encodeURIComponent(url);}}switchToTabHavingURI(url,true);}},//Open clipboard address KeyU_5(){FileUtils.getFile('UChrm',['user_chrome_files','_','u.exe']).launch();}, KeyA_5(){FileUtils.getFile('UChrm',['user_chrome_files','_','.Ev','Everything.exe']).launch();}, KeyQ_4(){FileUtils.getFile('UChrm',['user_chrome_files','_','.QT','QTranslate.exe']).launch();}, //============ }
Отредактировано b0ttle (19-07-2023 06:46:43)
Отсутствует
Работает, но почему то на mail.ru, bing.com, может ещё где не срабатывает, в чём может быть причина ?
Без понятия.
Даже если бы было расписано что значит «не срабатывает»,
и с цитатами из консоли, и подробнейшим STR, то это было бы
бесполезно,
поскольку воспроизвести это вот «на mail.ru, bing.com»,
для меня, не представляется возможным.
Но интересно, если закомментировать
searchSelect.style.setProperty("display", "none", "important");
чтобы встроенный пункт не скрывался,
то будет ли этот встроенный пункт срабатывать, там же.
Как добавить setTimeout в JSM?
Ну так тоже импортируй модуль Timer.
var {setTimeout} = …
key_data = e => { // перехват клавиш в начале скрипта для лучшего восприятия
log(e.keyCode); // ✕✖✘ недоступны функции из блока (async (id, func) => {
Конечно недоступны, log определяется как var log = … внутри функции.
Снаружи функции этот log не видно, и не должно быть видно.
Если нужно использовать log в key_data, но чтобы он задавался в (async (id, func) => {
тогда можно написать просто var log; (без ничего) рядом с key_data
а внутри (async (id, func) => { тогда написать log = … без var
Ну, это в общем случае. Блок-схема не предполагает, что сам (весь) код
как то завёрнут, то есть, что key_data, что var key_data, что window.key_data,
всё это одно и то же — мусор в окне. Тогда можно var log; и не писать.
Но лучше всё-таки код заворачивать.
Вопрос больше про "this.skip". Он не будет выполнять код в полях ввода, адресной строке?
skip() тоже можно перенести, тогда не будет.
Еще вопрос, про (е)/() в чем разница, это клик event? Переносить также с (е)?
Какой ещё «клик event»? keydown event же.
А вписывать (e) необходимо, только если он используется внутри,
иначе можно оставить просто ()
Вобщем как-то так
....... = { // перехват клавиш Meta 8 Ctrl 4 Shift 2 Alt 1 get skip() {return docShell.isCommandEnabled("cmd_insertText");}, Backquote() {this.skip || PlacesCommandHook.showPlacesOrganizer("BookmarksMenu");}, Digit1() {this.skip || document.getElementById("unified-extensions-button").click();},
Отредактировано Dumby (17-07-2023 23:10:10)
Отсутствует
Но интересно, если закомментировать
searchSelect.style.setProperty("display", "none", "important");
чтобы встроенный пункт не скрывался,
то будет ли этот встроенный пункт срабатывать, там же.
Не срабатывает, ладно, всё равно я эти поисковики редко использую.
Win7
Отсутствует
Dumby
Блогадарю, поправил. Только интересно, что клавиши совсем не работают в полях ввода. Это не связанно с this.skip, до этого еще заметил, но забыл написать. Функций работают, а сам ввод `,1,2,3,4,5.. нет.
Насчет get skip(){return docShell.isCommandEnabled("cmd_insertText");}, мне казалось что нужно переносить, но хотел куда-то в keydown_win=e=>{...}, боялся что напортачу с синтаксисом или еще с чем-то, и будет ли он оттуда работать. А так, он будто не на своем месте. Вопрос, может в keydown_win=e=>{...} уже реализован функционал с this.skip? Просто не разбираюсь, что там написано.
Отредактировано b0ttle (18-07-2023 02:53:55)
Отсутствует
клавиши совсем не работают в полях ввода.
в поле быстрого ответа этого форума перехват нажатий клавиш работает.
Про this.skip не понял. keydown_win не нужно править, а skip так работает: ret = keys.skip; // keys = { get skip(){…
Блок-схема не предполагает, что сам (весь) код как то завёрнут, ……Но лучше всё-таки код заворачивать
А как правильно завернуть код на блок-схеме или скрипте ucf_hookClicks.js, чтобы он не мусорил в окно?
Если всё завернуть в (async (id) => { …… })("hookClicks-and-tooltips"); пропадут общие функции для других скриптах, что неправильно…
Пробовал делать в одном объекте несколько общих функций для других скриптов, но не работает…
Отредактировано Dobrov (20-07-2023 13:40:28)
Отсутствует
dobrov
Не совсем понял, про ret = keys.skip; // keys = { get skip(){…
Пробовал так, по разному, но ничего не выходит.
Digit3(){keys.skip;openPreferences();},
Digit3(){get skip();openPreferences();},
Digit3(){get skip(){openPreferences();}},
Что значит ret=, первый раз вижу такое значение.
В общем, проблема в том, что `1234567, в полях ввода не пишутся, при рабочих Digit1,2,3,5,6,7. Функций работают, но текст нет. А при this.skip||, текст не работает и функций, в полях ввода, ничего не происходит. Отдельно функций работают. Как-то так.
Остальные хоткей, особо-то и не нужны ведь в полях ввода. Такие как F1,F2, там естественно проблем таких нет.
Отредактировано b0ttle (18-07-2023 12:23:49)
Отсутствует
Не совсем понял, про ret = keys.skip; // keys = { get skip(){…
Это пример, что функция keys.skip возвращает значение в переменную ret. (то есть, код работает)
А зачем перехват ввода цифр? Делай нормальные сочетания с комбинацией управляющих клавиш, например Ctrl+Atl+S, а кнопки без управляющих клавиш нафига перехватывать?
А всякие this.skip|| это из другого кода, я его не знаю…
Отсутствует
Если всё завернуть в (async (id) => { …… })("hookClicks-and-tooltips"); пропадут общие функции для других скриптах
Ну, если ничего внутри не поменять, то пропадут.
Но поменять же не проблема.
Пробовал делать в одном объекте несколько общих функций для других скриптов, но не работает
Конечно не работает.
globalThis в оконном скрипте ссылается на окно.
А Cu.getGlobalForObject(Cu) возвращает SystemGlobal
(так было не всегда, где-то с самого конца шестидесятых),
то есть глобальный объект всех модулей, JSM и ESM,
он один на весь процесс. Когда-то давно, такой был у каждой JSM'ки.
Кстати, название так и не утвердили.
Иначе говоря, ты добавил GlobShare в одно место,
а запрашиваешь его для использования — в другом месте.
Вобщем, заворачиваешь код,
а внутри пишешь window.GlobShare = {bla: 777};
Тогда в другом скрипте console.log(GlobShare.bla) должен показать 777.
Ну это если такое присваивание будет исполнено сперва,
а не после вызова console.log(), так что следует продумать порядок загрузки скриптов,
и, возможность влияния всякого асинхрона, тут надо смотреть конкретно по ситуации.
А зачем перехват ввода цифр? Делай нормальные сочетания с комбинацией управляющих клавиш, например Ctrl+Atl+S
Сравнил тоже. Одну клавишу нажимать или три.
Не у всех такие ловкие пальцы как у тебя.
проблема в том, что `1234567, в полях ввода не пишутся, при рабочих Digit1,2,3,5,6,7.
Такого быть не должно.
Надо искать причину. Может ты раскомментировал e.preventDefault();
в keydown_win = (e) => {…} и забыл, проверь.
Отсутствует
пишешь window.GlobShare = {bla: 777};
Я ждал совета покруче! Но старый известный способ объявлять данные через window. наверное самый простой!
Ещё посоветуй, каким способом сэкономить ресурсы браузера для нескольких window.Функций:
1) прописать нужные функции отдельно как window.ShareFunctions…
2) или вписать нужные функции в объект и объявить только его?
Отсутствует
известный способ объявлять данные через window. наверное самый простой
Ищешь каких-то сложностей?
Я всего лишь к тому, что в окно лучше добавлять только нужное, а не всё подряд.
Ещё посоветуй, каким способом сэкономить ресурсы браузера для нескольких window.Функций:
1) прописать нужные функции отдельно как window.ShareFunctions…
2) или вписать нужные функции в объект и объявить только его?
Ну как, смотри сам,
если добавлять отдельно, то возрастает вероятность конфликта
с именами браузерных и пользовательских свойств,
и нахлобучка для стороннего наблюдателя, типа «откуда здесь это взялось»,
зато в скриптах можно сразу писать ShareFunction1(); ShareFunction2();
А если собрать в один объект, то вероятность конфликта меньше,
и как-бы стройнее и логичнее, но обращаться тогда придётся ShareObject.ShareFunction()
или дополнительно писать var {ShareFunction1, ShareFunction2} = ShareObject;
Отсутствует
Dumby
Ура заработало, до этого я лишь правил изменения которые выходили. С последними изменениями, там настолько много чего поменялось в файле, что решил просто скопировать и потом уже менять. Так что, скорее всего с моей стороны были ошибки. Извините, что так долго мозг парил) Решилось.
Похоже проблема и правда была в //e.preventDefault(); в новом файле он закомментиван, я и подумать не мог, что он мог вызвать проблему. Думал, как удобно, не нужно везде его добавлять отдельно, он из коробки уже) Оказывается, мог вызывать столько проблем. С одельными комбинациями, и правда бывает удобно, что он из коробки. Но не в плане одних кнопок, как было у меня.
Dobrov
Насчет, "нафига". Удобно же, чем занимать какие-то комбинаций, которые еще запомни. Тут легче, тем более, они кроме как в полях ввода не используются.
Отредактировано b0ttle (19-07-2023 00:40:41)
Отсутствует
прикрутить горячие клавиши для клавиатуры, например Shift+1
вопрос по старому коду перехвата клавиш: Для чего и что делает строка var num = RegExp.$1 ?
и почему используется animate? (async anim => { код })({animate: true});
(async anim => { // горячие клавиши https://forum.mozilla-russia.org/viewtopic.php?pid=796907#p796907 // var re = /^(?:Digit|Numpad)(1|2|3|4)$/; var funcs = { 1: () => { true; }, 2: tab => gBrowser.removeAllTabsBut(tab), }; var args = ["keydown", e => { if (e.repeat || docShell.isCommandEnabled("cmd_insertText")) return; var m = (e.metaKey*8 + e.ctrlKey*4 + e.shiftKey*2 + e.altKey), n = m ? "_"+ m.toString() : ""; var num = RegExp.$1; // всегда 21 // if ( e.shiftKey || e.code.startsWith("N") && e.getModifierState("NumLock") && e.key != num ) // e.preventDefault(), funcs[num](gBrowser.selectedTab); e.preventDefault(); if (e.keyCode > 31) console.log('@ '+ e.key +' '+ e.code +' '+ e.keyCode +' '+ num +' '+ Math.random()); if (num in funcs) funcs[num](gBrowser.selectedTab); }, true]; addEventListener(...args); var id = Symbol(), ucf = ucf_custom_script_win; ucf.unloadlisteners.push(id); ucf[id] = {destructor: () => removeEventListener(...args)}; })({animate: true});
Отсутствует
что делает строка var num = RegExp.$1 ?
В приведённом коде — не делает ничего осмысленного,
поскольку регулярные выражения в коде не используются.
А в оригинале — в num пишется цифра клавиши.
Хотя да, нехорошо, фича deprecated. Короче, здесь почитай.
и почему используется animate? (async anim => { код })({animate: true});
Ну вот, например, пункт контекстного меню вкладки «Закрыть вкладки слева»
имеет атрибут "oncommand"
gBrowser.removeTabsToTheStartFrom(TabContextMenu.contextTab, {animate: true});
так что это просто цитата.
Отсутствует
Переделал перехват нажатий клавиш в скрипте ucf_hookClicks.js, возможности:
Простой синтаксис, различаются нажатия в полях ввода, в зависимости от имени (свойства объекта) можно игнорировать preventDefault().
Если в имени ключа первая буква строчная, нажатия передаются браузеру, preventDefault() не выполняется. Из двух равных ключей keyA и KeyA выбирается ключ с прописной буквы KeyA. Если нужно перехватить нажатия в полях ввода, добавьте символ «I»: KeyA_I
var klaBa = { // Пример блока обработки, нажатия клавиш Meta 8 Ctrl 4 Shift 2 Alt 1 Input 'I' Skip KeyA(e) { console.log('KeyA'); return 'KeyA'; // обычное нажатие клавиши }, keyA(e) { this.KeyA(e); // выполнить код обычного нажатия, не запускать preventDefault() return 'keyA Input'}, // нажатие в поле ввода KeyA_I() {0}, // в поле ввода (+ управляющие клавиши: KeyA_5I) KeyA_5() { console.log('нажатие A + Ctrl + Alt')} }
Отсутствует
Как сделать, чтобы F3 работал везде. С учетом preventDefault. То как сделал, он работает везде, за исключием одного момента, вне поля ввода, preventDefault не срабатывает. Может неправильно вписал?
Просто как пример. Когда нужно, чтобы хоткей работал везде. Тут хоткей не работает в поле ввода, но вызывается стандартный хоткей "поиск". Вне поля ввода, ctrl+g начинает работать нормально.
KeyG_4(){var bar=document.getElementById("ucf-additional-vertical-bar");setToolbarVisibility(bar,bar.collapsed);},
Тут добавил I, работает везде, но тогда вне поля ввода, он не перехватывает preventDefault.
В старом варианте кода, было легче, где надо добавить e.preventDefault, и конфликт не возникал. Может я что-то не так делаю?
KeyG_4I(){var bar=document.getElementById("ucf-additional-vertical-bar");setToolbarVisibility(bar,bar.collapsed);},
Отредактировано b0ttle (20-07-2023 00:53:40)
Отсутствует
Тут добавил I, работает везде, но тогда вне поля ввода, он не перехватывает preventDefault.
В старом варианте кода, было легче, где надо добавить e.preventDefault, и конфликт не возникал.
Вообще-то, я подробно всё расписал, может у тебя старая версия ? ucf_hookClicks.js часто обновляю.
Брал за основу код Dumby, только упростил: вместо this.skip || команда достаточно добавить «I»
Можно убрать проверку на поля ввода, но поведение при нажатиях на разных страницах будет неадекватным.
F3(){ console.log('F3 exec'); openPreferences(); }, F3_I(){this.F3()}, // F3 в поле ввода KeyG_4(){ // Ctrl+G var bar = document.getElementById("ucf-additional-vertical-bar"); setToolbarVisibility(bar,bar.collapsed); }, KeyG_4I(){this.KeyG_4()}, // Ctrl+G в поле ввода
Отсутствует
Dobrov
То что надо. Ничего теперь не конфликтует, но как-то не практично. Раньше все комбинаций работали где угодно, за исключением this.skip||. Старый варинт как-то практичнее в этом плане. Вот `1234567V, сейчас с ними все отлично, но из-за них теперь страдают и другие комбинаций. Как-то так) Все же, старый варинт кастомизаций, где ты сам выбирал, что и как будет работать, просто подставив впереди нужный коммент. Более удобен.
Просто как пример, Alt+Ctrl+S, что-то написал в поле ввода, захотел, выделил и сохранил. Теперь такой возможности нет. Ну есть, но как-то не очень удобно.
Сейчас, когда KeyG_4I, он конфликтует из-за preventDefault, в полях ввода он перехватывает стандартные комбинаций пойска. Но вне поля ввода, он этого не делает. В этом и проблема. Это в случае со стандартными хоткеями. Есть тот же F3, где тоже стандартная комбинация пойск, на F2, там расширение у меня, его тоже надо перехватывать с preventDefault. Не знаю, как еще объяснить. В общем, из-за того что все из коробки, не очень удобно и что-то может конфкликтовать, и конфликтует. Как было до этого с preventDefault, в полях ввода, когда `1234567 отказывались вообще работать.
Даже так не работает, конфликтует из-за I. И e.preventDefault(); не срабатывает.
keyG_4I(e){e.preventDefault();var bar=document.getElementById("ucf-additional-vertical-bar");setToolbarVisibility(bar,bar.collapsed);},
Так то что надо. Нигде ничего не конфликтует.
KeyG_4(){var bar=document.getElementById("ucf-additional-vertical-bar");setToolbarVisibility(bar,bar.collapsed);}, KeyG_4I(){this.KeyG_4()},
Отредактировано b0ttle (20-07-2023 12:31:54)
Отсутствует