почему выделенный текст не появляется?

привет, у меня проблема с моими первыми надстройками.. я пытаюсь выбрать слово на странице сайта с помощью этой функции

function getSelected() {
   var userSelection;
   if (window.getSelection) {
      userSelection = window.getSelection();
   } else if (document.selection) {
       userSelection = document.selection.createRange();
   }
   return userSelection;
}

function getText() {
 var select = getSelected()+ "";
  alert(select);
}

в моем xul я выполняю приведенную выше функцию следующим образом:

    <menuitem id="inlinetransContextMenuPage"
     label="Terjemahkan dengan inlinetrans"
     onclick="overlay.getText()" />
</popup>

но почему я слово не может появиться, когда я выбираю слово на странице (всплывающее окно пусто)..


person user495688    schedule 19.12.2010    source источник


Ответы (2)


window.getSelection() возвращает выбор из хромированного окна, которое почти всегда пусто. Как вы обнаружили, вам нужно использовать document.commandDispatcher.focusedWindow, чтобы узнать, какое окно имеет активный выбор. (Если вы ленивы, вы могли бы попробовать content.getSelection(), но это работает, только если на странице нет фреймов.)

person Neil    schedule 13.01.2011

Возможно, происходит то, что к тому времени, когда событие click срабатывает в XUL <menuitem>, действие щелчка по нему уничтожило выделение на странице. Попробуйте вместо этого использовать событие mousedown (т. е. измените onclick на onmousedown).

Кроме того, функция getSelected() излишне сложна. Поскольку ваш код должен работать только в Firefox, вы можете использовать:

function getSelected() {
    return window.getSelection().toString();
}
person Tim Down    schedule 19.12.2010
comment
@ Тим Даун: это все еще не работает, когда я использую window.getSelection().toString(); но когда я пытаюсь использовать document.commandDispatcher.focusedWindow.getSelection().toString(); и это работает. почему выбранное слово не может появиться первым способом и может появиться вторым способом..?? - person user495688; 20.12.2010
comment
@user495688 user495688 ты действительно работаешь с одним окном? Код window == document.commandDispatcher.focusedWindow выводит true или false? - person The Student; 20.12.2010
comment
@ user495688: Извините, я не эксперт по надстройкам Mozilla. Как только вы завладели объектом window страницы, я приступил к делу, но как вы завладеете им в надстройке, я не знаю. Если document.commandDispatcher.focusedWindow работает, то, возможно, вам следует использовать его... - person Tim Down; 20.12.2010