Есть в сборнике дополнений для Firefox пара замечательных дополнений, но, к сожалению, авторы их забросили и начиная с версии Firefox 3.5 они уже якобы не совместимо с браузером. Но это не совсем так.
26 Января 2016 (06:24:39)
Alex
(гость)
Есть пожелание дополнить fix версию "Fetch Text URL" возможностью определять выделенный текст в поле ввода (типа того, где сейчас текст набираю или однострочный вариант). Даю решение, чтоб добавить в существующий аддон и не плодить дополнительные. Добавилась одна новая функция getBrowserSelection_ и минимальные изменения в существующей searchSelected.
//------------------------------------------------------------------------------ /** from firefox-34.0.5.source\mozilla-release\browser\base\content\browser.js:5132 * Gets the selected text in the active browser. Leading and trailing * whitespace is removed, and consecutive whitespace is replaced by a single * space. A maximum of 150 characters will be returned, regardless of the value * of aCharLen. * * @param aCharLen * The maximum number of characters to return. -1 - for no limit */ FTU.getBrowserSelection_ = function(aCharLen) { // selections of more than 150 characters aren't useful const kMaxSelectionLen = 150; const charLen = Math.min(aCharLen || kMaxSelectionLen, kMaxSelectionLen);
//let [element, focusedWindow] = BrowserUtils.getFocusSync(document); var focusedWindow = document.commandDispatcher.focusedWindow; var element = document.commandDispatcher.focusedElement; var selection = focusedWindow.getSelection().toString(); // try getting a selected text in text input. if (!selection) { var isOnTextInput = function isOnTextInput(elem) { // we avoid to return a value if a selection is in password field. // ref. bug 565717 return elem instanceof HTMLTextAreaElement || (elem instanceof HTMLInputElement && elem.mozIsTextField(true)); };
if (isOnTextInput(element)) { let Ci = Components.interfaces; selection = element.QueryInterface(Ci.nsIDOMNSEditableElement) .editor.selection.toString(); } }
if (selection) { if (charLen>0 && selection.length > charLen) { // only use the first charLen important chars. var pattern = new RegExp("^(?:\\s*.){0," + charLen + "}" pattern.test(selection); selection = RegExp.lastMatch; } else selection = selection.trim().replace(/\s+/g, " "
Добавилась одна новая функция getBrowserSelection_ и минимальные изменения в существующей searchSelected.
Надеюсь, данный функционал будет добавлен.
Спасибо.