>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Firefox http://forum.mozilla-russia.org/viewforum.php?id=4 >Горячая клавиша для копирования HTML выделенного фрагмента http://forum.mozilla-russia.org/viewtopic.php?id=67604 |
xseed > 12-06-2015 14:28:03 |
Подскажите пожалуйста, существует ли дополнение, позволяющее назначить горячие клавиши командам контекстного меню, вызываемого правой кнопкой мыши? Может быть просто есть какой-нибудь конфигурационный файл? PS: Установил связку keyconfig 20110522 + MenuManipulator 20140526, но в редакторе меню MenuManipulator не нашел команд для работы с HTML-редактором. Попробовал установить плагин Copy HTML 0.2.5.1-signed, в редакторе меню MenuManipulator появился пункт Copy HTML, но для данного пункта имеются свойства class и label, а свойства command или oncommand, необходимые для вставки в поле /* CODE */ плагина keyconfig, отсутствуют. Как разрешить проблему? По-видимому надо воспользоваться какой-то функцией в плагине Copy HTML, а вот какой? Или существует более простой способ решения задачи? Подскажите! 12-06-2015 14:42:01 Выделить код Код:'use strict'; let contextMenu = require("sdk/context-menu"); let clipboard = require("sdk/clipboard"); let selection = require("sdk/selection"); contextMenu.Item({ label: "Copy HTML", context: contextMenu.SelectionContext(), contentScript: 'self.on("click", self.postMessage);', onMessage: function() clipboard.set(selection.html) }); Может быть, отсюда что выдрать? Как это сделать? |
xseed > 12-06-2015 15:28:17 |
Вот еще нашел: Как повесить вызов меню на клавишу: Выделить код Код:var cm = document. getElementById ("contentAreaContextMenu"); cm. showPopup (window. getBrowser (), 0, 0, "context"); Но не пойму как прикрутить это к Copy HTML? |
xseed > 12-06-2015 17:30:10 |
Установил дополнение Menu Wizard 2.08.1-signed, и обнаружил, что при попытке отредактировать контекстное меню через спец. кнопку, пункт "Copy HTML" подсвечен серым цветом, а напротив него желтый знак замочка, - можно как-нибудь его разлочить? 12-06-2015 17:59:32 PS: Кажется это не редактируемое меню связано с тем, что оно динамическое, при попытке переместить туда элемент меню выводится соответствующая подсказка. Выходит, горячие клавиши можно назначать только статическим элементам меню? Можно тогда как-то сделать элемент Copy HTML статическим? Так как же все-таки можно организовать сабж? |
ffx2014 > 12-06-2015 21:20:08 |
Я конечно в скриптам полный ноль. |
turbot > 13-06-2015 01:41:29 |
xseed Выделить код Код:addEventListener('keydown', function(e) { if ((e.altKey) && (e.shiftKey) && (e.keyCode == 67) || (e.altKey) && (e.shiftKey) && (e.keyCode == 1057)) { //alt + shift + C в en/ru раскладке e.preventDefault(); e.stopPropagation(); var df = document.commandDispatcher.focusedWindow.getSelection().getRangeAt(0).cloneContents(); var tmp = document.createElementNS("http://www.w3.org/1999/xhtml", "div"); tmp.appendChild(df); gClipboard.write(tmp.innerHTML); }; }); в инициализацию. |
xseed > 13-06-2015 23:53:46 |
turbot пишет
Ну не знаю, не помогло мне. Ваш скрипт у меня не отрабатывает. Создал кнопку: Ни по горячей клавише ALT-SHIFT-C, ни через нажатие кнопки на панели инструментов HTML код выделенного фрагмента страницы не оказывается в буфере обмена. ЧЯДНТ?
Если 67 - десятичный код символа "Цэ", а точнее, код символа "C" в верхнем регистре, то бишь Uppercase C, то почему 1057 - десятичный код русского символа "с"? Если перебрать все 4 сочетания символа в русской и англ. раскладке в верхнем регистре и без, должно получиться примерно так (я не знаток в JS): Выделить код Код:if ((e.altKey) && (e.shiftKey) && (e.keyCode == 67) || (e.altKey) && (e.shiftKey) && (e.keyCode == 99)) || (e.altKey) && (e.shiftKey) && (e.keyCode == 209)) || (e.altKey) && (e.shiftKey) && (e.keyCode == 241)) { // Uppercase C, Lowercase c, Uppercase С, Lowercase с или нет? Так или иначе код не выполняется... |
turbot > 14-06-2015 00:13:45 |
xseed
Это неважно. Как я понимаю. В любом случае, у меня работает. xseed пишет
Потому что листенер должен быть запущен, чтобы отслеживать нажатие клавиш. Код из вкладки код выполняется только при нажатии кнопки или если вызвать кнопку горячей клавишей (но тут проблема - автор так и не сделал, чтобы срабатывало независимо от раскладки. Потому и извращения с "if ((e.altKey) && (e.shiftKey) && (e.keyCode == 67) || (e.altKey) && (e.shiftKey) && (e.keyCode == 1057))"). Попробуйте установить с амо тестовую версию CB. Может в этом причина. У меня она стоит. Больше ничем не помогу. Я не большой знаток. Ищите помощи в теме Custom Buttons. |
rbfyec > 14-06-2015 13:01:28 |
xseed Выделить код Код:var df = document.commandDispatcher.focusedWindow.getSelection().getRangeAt(0).cloneContents(); var tmp = document.createElementNS("http://www.w3.org/1999/xhtml", "div"); tmp.appendChild(df); gClipboard.write(tmp.innerHTML); и создайте новое действие в keyconfig да и дело с концом. Не надо никаких MenuManipulator, ни Custom Buttons, ничего. А к turbot у меня вопрос: в скопированном HTML некоторые элементы получили атрибут xmlns="http://www.w3.org/1999/xhtml". Что это? |
Dumby > 14-06-2015 13:52:26 |
turbot пишет
Что-то ты меня запутал. Вот запустил я FF38, и кликаю по кнопке. Хочешь тоже понажимать ? скрытый текст Выделить код Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname/%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv///////////8AALv/AAC7/wAAu/8AALv///////////8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7////////////AAC7/wAAu/8AALv/////////////////AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu////////////wAAu/8AALv/////////////////AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv///////////8AALv/////////////////AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7////////////////////////////AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu///////////////////////AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv///////////////////////////8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7////////////AAC7/////////////////wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu////////////wAAu/8AALv/////////////////AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv///////////8AALv/AAC7/wAAu////////////wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AAC7/wAAu/8AALv/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%28%28%29%20%3D%3E%20%7B%0A%09function%20info%28e%29%20%5B%0A%09%09%22type%3A%20%20%20%20%20%20%22%20+%20e.type%2C%0A%09%09%2C%0A%09%09%22keyCode%3A%20%20%20%22%20+%20e.keyCode%2C%0A%09%09%22charCode%3A%20%20%22%20+%20e.charCode%2C%0A%09%09%2C%0A%09%09%22ctrlKey%3A%20%20%20%22%20+%20e.ctrlKey%2C%0A%09%09%22shiftKey%3A%20%20%22%20+%20e.shiftKey%2C%0A%09%09%22altKey%3A%20%20%20%20%22%20+%20e.altKey%2C%0A%09%09%2C%0A%09%09%22key%3A%20%20%20%20%20%20%20%22%20+%20e.key%2C%0A%09%09%22code%3A%20%20%20%20%20%20%22%20+%20e.code%2C%0A%09%09%2C%0A%09%09%22which%3A%20%20%20%20%20%22%20+%20e.which%2C%0A%09%09%22repeat%3A%20%20%20%20%22%20+%20e.repeat%0A%09%5D%0A%09function%20elm%28arg%2C%20parent%2C%20attrs%2C%20before%20%3D%20null%29%20%7B%0A%09%09var%20node%20%3D%20typeof%20arg%20%3D%3D%20%22string%22%20%3F%20document.createElement%28arg%29%20%3A%20arg%3B%0A%09%09if%20%28attrs%29%20for%28var%20attr%20in%20attrs%29%20node.setAttribute%28attr%2C%20attrs%5Battr%5D%29%3B%0A%09%09parent%20%26%26%20parent.insertBefore%28node%2C%20before%29%3B%0A%09%09return%20node%3B%0A%09%7D%0A%09var%20panel%20%3D%20elm%28%22panel%22%2C%20self%2C%20%7B%0A%09%09position%3A%20%22after_end%22%2C%0A%09%09onpopupshowing%3A%20%22this.handlePopupshowing%28event%29%3B%22%2C%0A%09%09onpopuphidden%3A%20%22this.handlePopuphidden%28event%29%3B%22%2C%0A%09%09style%3A%20%22border%3A%201px%20solid%20black%3B%22%2C%0A%09%7D%29%3B%0A%09var%20container%20%3D%20elm%28%22hbox%22%2C%20panel%2C%20%7Bflex%3A%201%7D%29%3B%0A%09var%20box%20%3D%20panel.keydown%20%3D%20elm%28%22textbox%22%2C%20container%2C%20%7B%0A%09%09readonly%3A%20true%2C%0A%09%09multiline%3A%20true%2C%0A%09%09style%3A%20%27min-width%3A%20280px%3B%20min-height%3A%20300px%3B%20font-family%3A%20-moz-fixed%3B%20font-size%3A%2016px%3B%20margin%3A%200%3B%27%0A%09%7D%29%3B%0A%09box%20%3D%20panel.keypress%20%3D%20elm%28box.cloneNode%28true%29%2C%20container%29%3B%0A%09panel.keyup%20%3D%20elm%28box.cloneNode%28true%29%2C%20container%29%3B%0A%0A%09self._handleClick%20%3D%20%28%29%20%3D%3E%20panel.openPopup%28self%29%3B%0A%09var%20events%20%3D%20%22keydown%20keypress%20keyup%22.split%28%22%20%22%29%3B%0A%09panel.handlePopupshowing%20%3D%20e%20%3D%3E%20%7B%0A%09%09for%28var%20type%20of%20events%29%20%7B%0A%09%09%09window.addEventListener%28type%2C%20keyHandler%2C%20true%29%3B%0A%09%09%09panel%5Btype%5D.value%20%3D%20%22Press%20Any%20Key...%22%3B%0A%09%09%7D%0A%09%7D%0A%09panel.handlePopuphidden%20%3D%20e%20%3D%3E%20%7B%0A%09%09for%28var%20type%20of%20events%29%20window.removeEventListener%28type%2C%20keyHandler%2C%20true%29%3B%0A%09%7D%0A%09function%20keyHandler%28e%29%20%7B%0A%09%09e.type%20%3D%3D%20%22keydown%22%0A%09%09%09%3F%20panel.keypress.value%20%3D%20panel.keyup.value%20%3D%20%22%22%0A%09%09%09%3A%20e.preventDefault%28%29%3B%0A%09%09e.stopPropagation%28%29%3B%0A%09%09e.stopImmediatePropagation%28%29%3B%0A%09%09panel%5Be.type%5D.value%20%3D%20info%28e%29.join%28%22%5Cn%22%29%3B%0A%09%7D%0A%7D%29%28%29%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E |
Dumby > 14-06-2015 14:47:54 |
rbfyec пишет
Я бы тоже не отказался послушать лекцию на тему «Что это?». скрытый текст Выделить код Код://var tmp = document.createElementNS("http://www.w3.org/1999/xhtml", "div"); var tmp = df.ownerDocument.createElement("div"); |
turbot > 14-06-2015 14:52:11 |
Dumby пишет
Эээ, но уменя копирует... И в русской и в английской раскладке. Отсюда http://www.w3schools.com/charsets/ref_utf_cyrillic.asp брал. rbfyec пишет
Кто знает... Я эту часть скопипастил у Infocatcher'а, где-то в теме CB. |
Dumby > 15-06-2015 12:44:26 |
turbot пишет
Нет, не поэтому. Работает потому, |
turbot > 15-06-2015 17:25:04 |
Dumby |
xseed > 18-06-2015 09:04:44 |
rbfyec пишет
Странно, но и с помощью keyConfig у меня не получилось скопировать html код выделенного фрагмента. Я грешным делом подумал, что какое-то приложение перехватывает, но и для сочетания CTRL-] чуда не произошло. Может в about:config что-то надо подправить? |
xseed > 20-06-2015 09:29:49 |
okkamas_knife, в консоли браузера при вызове и прокрутке окна настроек keyconfig появляются ошибки типа "TypeError: props is undefined" для функции Выделить код Код:getCellProperties: function(row,col,props) { var key = gKeys[row]; if(key.hardcoded) props.AppendElement(gAtomService.getAtom("hardcoded")); if(key.disabled) props.AppendElement(gAtomService.getAtom("disabled")); if(key.pref[3]) props.AppendElement(gAtomService.getAtom("custom")); if(key.pref.length) props.AppendElement(gAtomService.getAtom("user")); if((col.id || col) == "shortcut" && gUsedKeys[key.shortcut].length > 1) props.AppendElement(gAtomService.getAtom("duplicate")); }, Не знаю, имеет ли эта ошибка какое-либо отношение к рассматриваемой проблеме или нет? https://yadi.sk/i/Jdr_0Rv7hMsrv |
toxa > 21-06-2015 09:36:13 |
okkamas_knife пишет
А что, gClipboard.write() уже больше не работает? |
turbot > 21-06-2015 15:06:41 |
У меня же на Nightly работает. Мне кажется, это у топикстартера что-то локальное. |
xseed > 21-06-2015 22:35:16 |
okkamas_knife пишет
Помогло. okkamas_knife, Спасибо большое за ответ! В чем была проблема с определением функции gClipboard, мне так и не удалось разобраться, сборка официальная с сайта Mozilla |
Infocatcher > 21-06-2015 23:35:52 |
xseed пишет
Это из Custom Buttons, без расширения этого и не работает. |
Ki_rrrilll > 10-03-2016 19:39:18 |
xseed пишет
Подскажите пожалуйста, у меня как раз есть эта ошибка и я нашел где вроде предлагают какой то фикс http://forums.mozillazine.org/viewtopic … #p14082767 |
Ki_rrrilll > 18-03-2016 12:48:48 |
Господа знатоки ну подскажите! |