Domanda

Sto creando un plug-in del browser Internet Explorer che deve essere tenuto aggiornato su ciò che il testo è stato selezionato dall'utente, o in mancanza di testo viene selezionata a tutti. Ho imparato come ottenere il testo selezionato da leggendo qui . Questo è il mio codice per farlo:

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

Tuttavia, sto avendo difficoltà a determinare il gestore di eventi (s) da cui per accedere Range.Text ad aggiornare il mio plug-in. Utilizzando l'evento SelectionChange da sola non funziona in tutti i casi. Quando l'utente deseleziona il testo cliccando direttamente sulla selezione, invece di cliccare su una parte diversa della pagina web, Range.Text contiene ancora il vecchio valore (non nullo) quando SelectionChange è sollevata. Una soluzione è quella di ascoltare anche per eventi click. Un evento click viene generato immediatamente dopo SelectionChange, ma a quel punto Range.Text è finalmente nullo. Tuttavia, ho incontrato un ulteriore problema per il quale non ho trovato una soluzione. Cioè, se un utente fa doppio clic su una parola, selezionando così, l'evento SelectionChange non viene generato a tutti. Inoltre, quando viene generato l'evento click (o di un evento o di un evento selectstart mousedown), Range.Text è ancora nulla!

Come posso risolvere quest'ultimo problema? O c'è un approccio globale meglio che posso prendere?

È stato utile?

Soluzione

Provare ad utilizzare l'evento ondragend per la semplice selezione e l'evento ondblclick per la selezione fare doppio clic. Se non funziona provate a combinare alcuni eventi ( http://javascript.gakaa.com/ c / events.aspx )

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top