Ладно, допустим UCF уже развёрнут, обновлён и работает.
Развернут, но не обновлен и соответственно не работает. Обновил, сделал все как Вы описали и аллилуя - все заработало! Большое спасибо!
Отсутствует
Доброго дня.
Есть у меня старая кнопка - Switch Keyboard Layout
(keybUtils => { var btn = this; var listener = { handleEvent(e) { if(e.target != btn) return; e.preventDefault(); e.stopPropagation(); this.switch(); }, switch() { var br = document.activeElement; br && br.localName == "browser" && br.isRemoteBrowser ? br.messageManager.loadFrameScript(this.url, false) : this.keybUtils.switchSelKeybLayout(); }, get url() { delete this.url; return this.url = `data:;charset=utf-8,(${ encodeURIComponent(keybUtils) }).switchSelKeybLayout()`; }, get keybUtils() { delete this.keybUtils; var url = "data:;charset=utf-8,this.keybUtils = " + encodeURIComponent(keybUtils); Services.scriptloader.loadSubScript(url, this); this.keybUtils.button = btn; this.keybUtils.getFocusedElement = function(_subCall, _focusFixed) { if( !_focusFixed && "closeMenus" in window && document.commandDispatcher.focusedElement == this.button ) { closeMenus(this.button); setTimeout(function(_this) { _this.switchSelKeybLayout(_subCall, true); }, 0, this); return; } return document.commandDispatcher.focusedElement; } return this.keybUtils; } }; if(btn instanceof XULElement && addEventListener.length > 3) { addEventListener("command", listener, true, this.parentNode); } listener.switch(); })(`{ //== Options noSelBehavior: { // Shift+Home ctrlKey: false, altKey: false, shiftKey: true, metaKey: false, keyCode: KeyEvent.DOM_VK_HOME, charCode: 0 }, // 0 - do nothing // 1 - convert all text // Or use object like following to simulate "keypress" event: /* noSelBehavior: { // Ctrl+Shift+Left ctrlKey: true, altKey: false, shiftKey: true, metaKey: false, keyCode: KeyEvent.DOM_VK_LEFT, charCode: 0 } */ convTableForward: { // ru -> en "\\"": "@", ":": "^", ";": "$", "?": "&", ",": "?", "/": "|", ".": "/", "э": "'", "б": ",", "ю": ".", "Ж": ":", "ж": ";", "Б": "<", "Ю": ">", "Э": "\\"", "х": "[", "ъ": "]", "ё": "\`", "Х": "{", "Ъ": "}", "Ё": "~", "№": "#", "Ф": "A", "ф": "a", "И": "B", "и": "b", "С": "C", "с": "c", "В": "D", "в": "d", "У": "E", "у": "e", "А": "F", "а": "f", "П": "G", "п": "g", "Р": "H", "р": "h", "Ш": "I", "ш": "i", "О": "J", "о": "j", "Л": "K", "л": "k", "Д": "L", "д": "l", "Ь": "M", "ь": "m", "Т": "N", "т": "n", "Щ": "O", "щ": "o", "З": "P", "з": "p", "Й": "Q", "й": "q", "К": "R", "к": "r", "Ы": "S", "ы": "s", "Е": "T", "е": "t", "Г": "U", "г": "u", "М": "V", "м": "v", "Ц": "W", "ц": "w", "Ч": "X", "ч": "x", "Н": "Y", "н": "y", "Я": "Z", "я": "z", __proto__: null }, //== End of options get convTableBackward() { var ctb = { __proto__: null }; var ctf = this.convTableForward; for(var c in ctf) ctb[ctf[c]] = c; delete this.convTableBackward; return this.convTableBackward = ctb; }, inPrimaryLayout: function(s) { for(var i = 0, l = s.length; i < l; ++i) { var c = s.charAt(i); if(c in this.convTableForward) return true; if(c in this.convTableBackward) return false; } return false; }, switchKeybLayout: function(s, convTable) { var res = ""; for(var i = 0, l = s.length; i < l; ++i) { var c = s.charAt(i); res += c in convTable ? convTable[c] : c; } return res; }, getFocusedElement: function() { return Cc["@mozilla.org/focus-manager;1"].getService(Ci.nsIFocusManager) .getFocusedElementForWindow(content, true, {}); }, switchSelKeybLayout: function(_subCall, _focusFixed) { var fe = this.getFocusedElement(_subCall, _focusFixed); if(!fe) return; if(fe instanceof HTMLInputElement || fe instanceof HTMLTextAreaElement) { var ta = fe; try { var val = ta.value; var sel = val.substring(ta.selectionStart, ta.selectionEnd); } catch(e) { // Non-text HTMLInputElement return; } if(!sel && val && this.noSelBehavior && !_subCall) { if(this.noSelBehavior == 1) { ta.selectionStart = 0; ta.selectionEnd = val.length; sel = val; } else { this.handleNoSel(ta); return; } } if(!sel) return; var res = this.switchKeybLayout( sel, this.inPrimaryLayout(sel) ? this.convTableForward : this.convTableBackward ); if(res != sel) this.insertText(ta, res); } else if(fe.contentEditable == "true") { var doc = fe.ownerDocument; var docURI = doc.documentURI; if( docURI.substr(0, 5) == "data:" && docURI.indexOf("chrome://browser/skin/devtools/") != -1 ) { //~ todo: seems like we only can use paste from clipboard here... return; } var sel = doc.defaultView.getSelection(); var rng = sel.rangeCount && sel.getRangeAt(0); var tmpNode; if(!rng || rng.collapsed) { if(!this.noSelBehavior || _subCall) return; if(this.noSelBehavior == 1) { var r = doc.createRange(); r.selectNodeContents(fe); sel.removeAllRanges(); sel.addRange(r); tmpNode = fe.cloneNode(true); } else { this.handleNoSel(fe); return; } } else { tmpNode = doc.createElementNS("http://www.w3.org/1999/xhtml", "div"); tmpNode.appendChild(rng.cloneContents()); } var orig = tmpNode.innerHTML; var convTable = this.inPrimaryLayout(tmpNode.textContent) ? this.convTableForward : this.convTableBackward; var _this = this; var parseChildNodes = function(node) { if(node instanceof Element) { var childNodes = node.childNodes; for(var i = childNodes.length - 1; i >= 0; --i) parseChildNodes(childNodes[i]); } else if(node.nodeType == node.TEXT_NODE) { var text = node.nodeValue; var newText = _this.switchKeybLayout(node.nodeValue, convTable); if(newText != text) node.parentNode.replaceChild(doc.createTextNode(newText), node); } } parseChildNodes(tmpNode); var res = tmpNode.innerHTML; if(res != orig) doc.execCommand("insertHTML", false, res); } }, handleNoSel: function(node) { this.select(node); this.switchSelKeybLayout(true); }, select: function(node) { var e = this.noSelBehavior; if(!e || typeof e != "object") return; var evt = node.ownerDocument.createEvent("KeyboardEvent"); evt.initKeyEvent( "keypress", true /*bubbles*/, true /*cancelable*/, node.ownerDocument.defaultView, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.keyCode, e.charCode ); node.dispatchEvent(evt); }, insertText: function(ta, text) { //var editor = ta.QueryInterface(Components.interfaces.nsIDOMNSEditableElement).editor var editor = ta.editor .QueryInterface(Components.interfaces.nsIPlaintextEditor); if(editor.flags & editor.eEditorReadonlyMask) return; var sTop = ta.scrollTop; var sHeight = ta.scrollHeight; var sLeft = ta.scrollLeft; // var sWidth = ta.scrollWidth; if(text) editor.insertText(text); else editor.deleteSelection(0, 0); ta.scrollTop = sTop + (ta.scrollHeight - sHeight); ta.scrollLeft = sLeft; // + (ta.scrollWidth - sWidth); } }`);
Отсутствует
Да мне особо проверить негде. Попробуй так
скрытый текст
попробовал, в панели поиска не появился ...
Отредактировано ALEX_45_ORP (10-10-2021 16:46:02)
Win 10х64
Отсутствует
Можно починить,чтоб с 91й версией заработало?
Удалить строку, на которую ругается консоль.
попробовал, в панели поиска не появился ...
«Проверить» и «попробовать» — имелось в виду как поиск пойдёт.
А «не появиться» в панели поиска он не может, не сочиняй.
Отсутствует
Dumby
Вот честно - я вообще без понятия о чём ты.Пальцем ткни
Так быстро всё меняется...
Без обид, но, похоже, я не успеваю следить и не понимаю о чём речь.
Отредактировано VORON (10-10-2021 22:11:11)
Отсутствует
ALEX_45_ORP пишет
попробовал, в панели поиска не появился ...
«Проверить» и «попробовать» — имелось в виду как поиск пойдёт.
А «не появиться» в панели поиска он не может, не сочиняй.
Уважаемый Dumby, у меня 92 сборка ВВП, я сделал из вашего кода manifest .json, положил его в папку, добавил иконку и сунул эту папку в omni.ja - не появилось в панели поиска, а youtube после таких манипуляций - появился там, вот я о чем ...
upd.
вставил код в кнопку СВ, появился в панели адреса - работает как положено, всем спасибо.
Отредактировано ALEX_45_ORP (11-10-2021 15:33:10)
Win 10х64
Отсутствует
вставил код в кнопку СВ, появился в панели
Да, это код-установщик. Предназначен быть запущенным единожды.
Устанавливает поисковик как пользовательский, то есть данные,
в конечном итоге, пишутся в search.json.mozlz4 в профиле.
Держать код в кнопке не нужно, разве что во вкладке Код, если потребуется поставить снова
(удаление и установка [просто заново, или со сменой иконки и/или названия]).
Я новичок
По рукам бы следовало шлёпать некоторых любителей втягивать непричастных,
даже несмотря на присутствующую там оговорку «если ...».
Как лучше сделать ожидание, к примеру несколько секунд. setTimeout не совсем то...
Ты свои вопросы со стороны видел? Буквы что ли по талонам выдают?
Вот отстранись, и представь, что это спросили тебя. Что бы ты ответил?
Как вы можете видеть, здесь применяется метод window.setTimeout();
Однако, мне кажется, что это «не совсем то» по следующим причинам:
1. ...
2. ...
3. ...
Полагаю, что можно сделать лучше, исходя из задачи достижения следующих целей:
1. ...
2. ...
3. ...
Какие будут комментарии?
Отсутствует
Okralis
ну вот, сейчас мне по рукам настучат. )))) в общем - вот тут https://forum.mozilla-russia.org/viewtopic.php?pid=794132#p794132 добрый человек написал инструкцию, только .xpi надо брать отсюда https://forum.mozilla-russia.org/viewtopic.php?pid=795196#p795196 дублирую прямую ссылку на архив - https://a.pomf.cat/upgmgy.zip и еще, обычно CustomButton используют на ветке ESR, на релизах нужно будет все это дело переустанавливать раз в месяц и исправлять несовместимости, копаясь в ветках этого ресурса.
Отредактировано sonyas75 (11-10-2021 20:49:24)
Отсутствует
Dumby
...в конечном итоге, пишутся в search.json.mozlz4 в профиле.
Держать код в кнопке не нужно...
спасибо за инфу, буду иметь ввиду.
Win 10х64
Отсутствует
Okralis
ну вот, сейчас мне по рукам настучат. )))) в общем - вот тут https://forum.mozilla-russia.org/viewtopic.php?pid=794132#p794132 добрый человек написал инструкцию, только .xpi надо брать отсюда https://forum.mozilla-russia.org/viewtopic.php?pid=795196#p795196 дублирую прямую ссылку на архив - https://a.pomf.cat/upgmgy.zip и еще, обычно CustomButton используют на ветке ESR, на релизах нужно будет все это дело переустанавливать раз в месяц и исправлять несовместимости, копаясь в ветках этого ресурса.
спасибо, всё установил!
Отсутствует
Кто тут за поисковик нагнетал...В search-extensions закинуть и профиль почистить.https://www.upload.ee/files/13542403/kino.rar.html
проверил на чистой сборке, да тоже работает, теперь в раздумье - чей вариант предпочтительней?
.
upd. а ты смотрю не стоишь на месте, уже 93 кастрировал? или еще только примеряешься?
Отредактировано ALEX_45_ORP (12-10-2021 19:44:40)
Win 10х64
Отсутствует
Сборки - разницы никакой. Понты одни.
понял, курю бамбук, занимаясь вечным вариантом, ждемс радикальных подвижек ...
Отредактировано ALEX_45_ORP (12-10-2021 19:58:37)
Win 10х64
Отсутствует
ждемс радикальных подвижек ...
Все ждут только одного , но не дождутся... Это декодер MP4. Если не DTV-DVD video decoder системный , хрен ролик посмотришь с MP4. Только webm с ютуба....
Гугловоды все себе захапали в этом плане.
Отсутствует
Dumby
this.onauxclick = e => e.button != 1 || gShowPopup(this);
popup появляется , но пункт "удалить с панели..." не работает. При ctrl + ПКМ - работает ....Это как код поменяли
Отсутствует
Нужна кнопка по нажатию на которую открывалась бы папка заданная мной.
this.onclick =e=> { e.button == 0 && runApp(); // ЛКМ }; function runApp() { var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); file.initWithPath( getPath() ); file.launch(); }; function getPath() { try { return Services.prefs.getComplexValue(s, Ci.nsIPrefLocalizedString).data; } catch(e) { return "C:\\Путь..."; }; };/*Initialization Code*/
Win7
Отсутствует