Как получить выделенный текст с помощью Firefox Add-On SDK? - PullRequest
3 голосов
/ 24 декабря 2011

Я пытаюсь создать надстройку Firefox, используя онлайн SDK надстройки .

Я начинаю с чего-то простого - я хочу добавить кнопку панели инструментов, которая читает текущий выделенный текст.

Документация для объекта Selection делает это выглядит достаточно просто:

var selection = require("selection");
if (selection.text)
  console.log(selection.text);

Мне кажется, это не работает, я просто получаю null.

Вот мой полный код:

var selection = require("selection");

require("widget").Widget({
    id: "widgetID1",
    label: "Test Mozilla Widget",
    contentURL: "http://www.mozilla.org/favicon.ico",
    onClick: function(event) {
        console.log('selection.text = ' + selection.text);
    }
});

Я также пытался создать объект selection внутри четного onClick с тем же эффектом.
Я могу использовать событие select, чтобы получать уведомления о новых выборках, поэтому я думаю, что могу использовать это вместо этого (и сохранить значение), но мне интересно, почему приведенный выше код не работает. .. Что я делаю не так?

Ответы [ 2 ]

8 голосов
/ 24 декабря 2011

Переменная selection, как определено, будет иметь выделенный текст, пока он находится в фокусе. Нажатие на значок виджета отвлекает внимание от выделенного текста, поэтому текст не выделяется.

Вот почему это работает при использовании внутри функции слушателя.

Чтобы подтвердить это, я попытался зарегистрировать его значение при нажатии кнопки на панели инструментов (используя модуль панели инструментов ), и это работает. Нажатие кнопки на панели инструментов (предположительно) не приводит к фокусировке.

Вот код, , и вы также можете проверить его онлайн :

var selection = require("selection");

var tbb = require("toolbarbutton").ToolbarButton({
    id: "test",
    label: "test",
    image: "http://www.mozilla.org/favicon.ico",
    onCommand: function(event) {
      console.log('selection = ' + JSON.stringify(selection)); // works!
    }
});
2 голосов
/ 24 декабря 2011

Вот решение с использованием события select:

var selection = require("selection");

var selectedText = '';

function selectionChanged(event){
    //todo: check for selection.isContiguous
    selectedText = selection.text;
}

selection.on('select', selectionChanged);

require("widget").Widget({
    id: "widgetID1",
    label: "Test Mozilla Widget",
    contentURL: "http://www.mozilla.org/favicon.ico",
    onClick: function(event) {
        console.log('Selection: ' + selectedText);
    }
});
...