Pergunta

Estou criando um plug-in que precisa ser mantido atualizado sobre o que o texto foi selecionado pelo usuário do navegador IE, ou se nenhum texto for selecionado em tudo. Aprendi a obter o texto selecionado pelo aqui . Este é meu código para fazê-lo:

var doc = browser.Document as IHTMLDocument2;
var selection = doc.selection as IHTMLSelectionObject;
var range = selection.createRange() as IHTMLTxtRange;
string selectedText = range.text;

No entanto, estou tendo dificuldade em determinar o manipulador de eventos (s) a partir do qual o acesso Range.Text para atualizar o meu plug-in. Usando o evento SelectionChange sozinha não funciona em todos os casos. Quando o usuário cancela a seleção do texto clicando diretamente na seleção, em vez de clicar em uma parte diferente da página, Range.Text ainda contém o valor antigo (não nulo), quando AlterarSelecção é levantada. A solução é também ouvir para eventos de clique. Um evento de clique é disparado imediatamente após AlterarSelecção, mas em que ponto Range.Text está finalmente nulo. No entanto, eu encontrei um outro problema para que eu não tenha encontrado uma solução. Ou seja, se um usuário clica duas vezes em uma palavra, selecionando assim, o evento SelectionChange não é levantada em tudo. Além disso, quando o evento click (ou evento mousedown ou evento selectstart) é levantada, Range.Text ainda é nulo!

Como posso resolver este último problema? Ou há uma abordagem global melhor que posso tomar?

Foi útil?

Solução

Tente usar o evento ondragend para a seleção simples e o evento ondblclick para a seleção clique duas vezes. Se ele não funciona tentar combinar alguns eventos ( http://javascript.gakaa.com/ c / events.aspx )

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top