Я создаю плагин для браузера IE, который необходимо постоянно обновлять относительно того, какой текст был выбран пользователем, или если текст в настоящее время вообще не выделен. Я узнал, как получить выделенный текст, читая здесь . Это мой код для этого:
var doc = browser.Document as IHTMLDocument2;
var selection = doc.selection as IHTMLSelectionObject;
var range = selection.createRange() as IHTMLTxtRange;
string selectedText = range.text;
Однако у меня возникают трудности с определением обработчика (ей) событий, из которого осуществляется доступ к range.text для обновления моего плагина. Использование одного события selectionchange работает не во всех случаях. Когда пользователь отменяет выделение текста, щелкая непосредственно по выделению, в отличие от щелчка по другой части веб-страницы, range.text по-прежнему содержит старое (ненулевое) значение, когда выделение выделения изменено. Обходной путь должен также слушать события щелчка. Событие щелчка вызывается сразу после выделения, но в этом случае range.text в итоге становится нулевым. Однако я столкнулся с еще одной проблемой, для которой я не нашел решения. То есть, если пользователь дважды щелкает слово и, таким образом, выбирает его, событие selectionchange вообще не вызывается. Кроме того, когда возникает событие щелчка (или событие mousedown, или событие selectstart), range.text по-прежнему равен нулю!
Как я могу решить эту последнюю проблему? Или я могу выбрать лучший подход?