Полезная информация

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.

№92616-07-2023 17:35:43

b0ttle
Участник
 
Группа: Members
Зарегистрирован: 22-10-2020
Сообщений: 182
UA: Firefox 115.0

Re: UCF - ваши кнопки, скрипты…

Dobrov
Круто, ждал) Все работает.

Отсутствует

 

№92716-07-2023 17:56:06

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 78.0

Re: UCF - ваши кнопки, скрипты…

Dobrov пишет

не получилось добавить 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)

Отсутствует

 

№92816-07-2023 21:15:30

kokoss
Участник
 
Группа: Members
Зарегистрирован: 15-02-2018
Сообщений: 1739
UA: unknown 0.0

Re: UCF - ваши кнопки, скрипты…

Dumby пишет

Но есть 115.0.2 и на ней скрипт работает.

Работает, но почему то на mail.ru, bing.com, может ещё где не срабатывает, в чём может быть причина ?


Win7

Отсутствует

 

№92917-07-2023 02:47:01

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 475
UA: Firefox 97.0

Re: UCF - ваши кнопки, скрипты…

Dumby пишет

Скрипты 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…, доступны, если их прописать в начало скрипта.

Блок-схема скрипта hookClicks.js (ChromeOnly)

Выделить код

Код:

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)

Отсутствует

 

№93017-07-2023 10:24:06

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 475
UA: Firefox 97.0

Re: UCF - ваши кнопки, скрипты…

Упростил скрипт перехвата кнопок/ролика мыши и нажатий клавиш 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 моего профиля

Отсутствует

 

№93117-07-2023 13:22:22

b0ttle
Участник
 
Группа: Members
Зарегистрирован: 22-10-2020
Сообщений: 182
UA: Firefox 115.0

Re: UCF - ваши кнопки, скрипты…

Dobrov
Вопрос, могу ли я перенести все отсюда, сюда в var keys = {}. По идее можно, просто думаю, а если в полях ввода будет мешаться код. С дефолтными клавищами, можно также e.preventDefault(); впереди? Просто не совсем представляю, как должно все выглядеть. А для чего userj(e), а где-то просто ()? За что отвечает (e). Да знаю, совсем ноль в этом. Просто потребитель) Спасибо за полезности, и Dumby за помощь.

Отредактировано b0ttle (17-07-2023 13:57:01)

Отсутствует

 

№93217-07-2023 13:40:21

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 475
UA: Firefox 97.0

Re: UCF - ваши кнопки, скрипты…

b0ttle - userj(e) - внешний скрипт пользователя

b0ttle пишет

Вопрос, могу ли я перенести все отсюда, сюда в var keys = {}.

нет, переноси код ручками - видно же, что синтаксис разный:
у тебя: "KeyG":{"true_false_false" ……
у меня: KeyS_1(e) { save()}, // S+Alt

Отсутствует

 

№93317-07-2023 14:02:07

b0ttle
Участник
 
Группа: Members
Зарегистрирован: 22-10-2020
Сообщений: 182
UA: Firefox 115.0

Re: UCF - ваши кнопки, скрипты…

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)

Отсутствует

 

№93417-07-2023 23:07:53

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 78.0

Re: UCF - ваши кнопки, скрипты…

kokoss пишет

Работает, но почему то на mail.ru, bing.com, может ещё где не срабатывает, в чём может быть причина ?

Без понятия.
Даже если бы было расписано что значит «не срабатывает»,
и с цитатами из консоли, и подробнейшим STR, то это было бы
бесполезно,
поскольку воспроизвести это вот «на mail.ru, bing.com»,
для меня, не представляется возможным.


Но интересно, если закомментировать
searchSelect.style.setProperty("display", "none", "important");
чтобы встроенный пункт не скрывался,
то будет ли этот встроенный пункт срабатывать, там же.


Dobrov пишет

Как добавить 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; и не писать.
Но лучше всё-таки код заворачивать.


b0ttle пишет

Вопрос больше про "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)

Отсутствует

 

№93518-07-2023 00:39:31

kokoss
Участник
 
Группа: Members
Зарегистрирован: 15-02-2018
Сообщений: 1739
UA: Firefox 115.0

Re: UCF - ваши кнопки, скрипты…

Dumby пишет

Но интересно, если закомментировать
searchSelect.style.setProperty("display", "none", "important");
чтобы встроенный пункт не скрывался,
то будет ли этот встроенный пункт срабатывать, там же.

Не срабатывает, ладно, всё равно я эти поисковики редко использую.


Win7

Отсутствует

 

№93618-07-2023 02:50:11

b0ttle
Участник
 
Группа: Members
Зарегистрирован: 22-10-2020
Сообщений: 182
UA: Firefox 115.0

Re: UCF - ваши кнопки, скрипты…

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)

Отсутствует

 

№93718-07-2023 04:35:22

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 475
UA: Firefox 97.0

Re: UCF - ваши кнопки, скрипты…

b0ttle пишет

клавиши совсем не работают в полях ввода.

в поле быстрого ответа этого форума перехват нажатий клавиш работает.
Про this.skip не понял. keydown_win не нужно править, а skip так работает: ret = keys.skip; // keys = { get skip(){…


Dumby пишет

Блок-схема не предполагает, что сам (весь) код как то завёрнут, ……Но лучше всё-таки код заворачивать

А как правильно завернуть код на блок-схеме или скрипте ucf_hookClicks.js, чтобы он не мусорил в окно?
Если всё завернуть в (async (id) => { …… })("hookClicks-and-tooltips"); пропадут общие функции для других скриптах, что неправильно…
Пробовал делать в одном объекте несколько общих функций для других скриптов, но не работает…

Отредактировано Dobrov (20-07-2023 13:40:28)

Отсутствует

 

№93818-07-2023 11:39:58

b0ttle
Участник
 
Группа: Members
Зарегистрирован: 22-10-2020
Сообщений: 182
UA: Firefox 115.0

Re: UCF - ваши кнопки, скрипты…

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)

Отсутствует

 

№93918-07-2023 12:53:46

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 475
UA: Firefox 97.0

Re: UCF - ваши кнопки, скрипты…

b0ttle пишет

Не совсем понял, про ret = keys.skip; // keys = { get skip(){…

Это пример, что функция keys.skip возвращает значение в переменную ret. (то есть, код работает)
А зачем перехват ввода цифр? Делай нормальные сочетания с комбинацией управляющих клавиш, например Ctrl+Atl+S, а кнопки без управляющих клавиш нафига перехватывать?
А всякие this.skip|| это из другого кода, я его не знаю…

Отсутствует

 

№94018-07-2023 13:40:31

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 78.0

Re: UCF - ваши кнопки, скрипты…

Dobrov пишет

Если всё завернуть в (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

Сравнил тоже. Одну клавишу нажимать или три.
Не у всех такие ловкие пальцы как у тебя.


b0ttle пишет

проблема в том, что `1234567, в полях ввода не пишутся, при рабочих Digit1,2,3,5,6,7.

Такого быть не должно.
Надо искать причину. Может ты раскомментировал e.preventDefault();
в keydown_win = (e) => {…} и забыл, проверь.

Отсутствует

 

№94118-07-2023 15:36:36

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 475
UA: Firefox 97.0

Re: UCF - ваши кнопки, скрипты…

Dumby пишет

пишешь window.GlobShare = {bla: 777};

Я ждал совета покруче! Но старый известный способ объявлять данные через window. наверное самый простой!
Ещё посоветуй, каким способом сэкономить ресурсы браузера для нескольких window.Функций:
1) прописать нужные функции отдельно как window.ShareFunctions…
2) или вписать нужные функции в объект и объявить только его?

Отсутствует

 

№94218-07-2023 21:57:08

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 78.0

Re: UCF - ваши кнопки, скрипты…

Dobrov пишет

известный способ объявлять данные через window. наверное самый простой

Ищешь каких-то сложностей?
Я всего лишь к тому, что в окно лучше добавлять только нужное, а не всё подряд.

Ещё посоветуй, каким способом сэкономить ресурсы браузера для нескольких window.Функций:
1) прописать нужные функции отдельно как window.ShareFunctions…
2) или вписать нужные функции в объект и объявить только его?

Ну как, смотри сам,
если добавлять отдельно, то возрастает вероятность конфликта
с именами браузерных и пользовательских свойств,
и нахлобучка для стороннего наблюдателя, типа «откуда здесь это взялось»,
зато в скриптах можно сразу писать ShareFunction1(); ShareFunction2();


А если собрать в один объект, то вероятность конфликта меньше,
и как-бы стройнее и логичнее, но обращаться тогда придётся ShareObject.ShareFunction()
или дополнительно писать var {ShareFunction1, ShareFunction2} = ShareObject;

Отсутствует

 

№94318-07-2023 23:51:59

b0ttle
Участник
 
Группа: Members
Зарегистрирован: 22-10-2020
Сообщений: 182
UA: Firefox 115.0

Re: UCF - ваши кнопки, скрипты…

Dumby
Ура заработало, до этого я лишь правил изменения которые выходили. С последними изменениями, там настолько много чего поменялось в файле, что решил просто скопировать и потом уже менять. Так что, скорее всего с моей стороны были ошибки. Извините, что так долго мозг парил) Решилось.
Похоже проблема и правда была в //e.preventDefault(); в новом файле он закомментиван, я и подумать не мог, что он мог вызвать проблему. Думал, как удобно, не нужно везде его добавлять отдельно, он из коробки уже) Оказывается, мог вызывать столько проблем. С одельными комбинациями, и правда бывает удобно, что он из коробки. Но не в плане одних кнопок, как было у меня.
Dobrov
Насчет, "нафига". Удобно же, чем занимать какие-то комбинаций, которые еще запомни. Тут легче, тем более, они кроме как в полях ввода не используются.

Отредактировано b0ttle (19-07-2023 00:40:41)

Отсутствует

 

№94419-07-2023 03:42:48

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 475
UA: Firefox 97.0

Re: UCF - ваши кнопки, скрипты…

Dumby пишет

прикрутить горячие клавиши для клавиатуры, например 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});

Отсутствует

 

№94519-07-2023 04:54:17

b0ttle
Участник
 
Группа: Members
Зарегистрирован: 22-10-2020
Сообщений: 182
UA: Firefox 115.0

Re: UCF - ваши кнопки, скрипты…

del

Отредактировано b0ttle (19-07-2023 06:47:04)

Отсутствует

 

№94619-07-2023 08:39:33

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 78.0

Re: UCF - ваши кнопки, скрипты…

Dobrov пишет

что делает строка var num = RegExp.$1 ?

В приведённом коде — не делает ничего осмысленного,
поскольку регулярные выражения в коде не используются.


А в оригинале — в num пишется цифра клавиши.
Хотя да, нехорошо, фича deprecated. Короче, здесь почитай.

и почему используется animate? (async anim => { код })({animate: true});

Ну вот, например, пункт контекстного меню вкладки «Закрыть вкладки слева»
имеет атрибут "oncommand"
gBrowser.removeTabsToTheStartFrom(TabContextMenu.contextTab, {animate: true});
так что это просто цитата.

Отсутствует

 

№94719-07-2023 12:34:37

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 475
UA: Firefox 97.0

Re: UCF - ваши кнопки, скрипты…

Переделал перехват нажатий клавиш в скрипте 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')}
}

Отсутствует

 

№94819-07-2023 19:49:45

b0ttle
Участник
 
Группа: Members
Зарегистрирован: 22-10-2020
Сообщений: 182
UA: Firefox 115.0

Re: UCF - ваши кнопки, скрипты…

Как сделать, чтобы F3 работал везде. С учетом preventDefault. То как сделал, он работает везде, за исключием одного момента, вне поля ввода, preventDefault не срабатывает. Может неправильно вписал?

Выделить код

Код:

F3_I(){openPreferences();},

Просто как пример. Когда нужно, чтобы хоткей работал везде. Тут хоткей не работает в поле ввода, но вызывается стандартный хоткей "поиск". Вне поля ввода, 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)

Отсутствует

 

№94920-07-2023 04:21:53

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 475
UA: Firefox 97.0

Re: UCF - ваши кнопки, скрипты…

b0ttle пишет

Тут добавил 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 в поле ввода

Отсутствует

 

№95020-07-2023 12:20:59

b0ttle
Участник
 
Группа: Members
Зарегистрирован: 22-10-2020
Сообщений: 182
UA: Firefox 115.0

Re: UCF - ваши кнопки, скрипты…

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)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]