【发布时间】:2009-08-25 09:08:00
【问题描述】:
我正在创建一个 IE 浏览器插件,它需要随时更新用户选择了哪些文本,或者当前是否没有选择任何文本。我学会了如何通过reading here 获取选定的文本。这是我这样做的代码:
var doc = browser.Document as IHTMLDocument2; var selection = doc.selection 作为 IHTMLSelectionObject; var range = selection.createRange() as IHTMLTxtRange; 字符串 selectedText = range.text;但是,我很难确定从哪个事件处理程序访问 range.text 以更新我的插件。单独使用 selectionchange 事件并不适用于所有情况。当用户通过直接单击选择来取消选择文本时,而不是单击网页的不同部分,range.text 在引发 selectionchange 时仍然包含旧的(非空)值。一种解决方法是同时监听点击事件。在 selectionchange 之后立即引发单击事件,但此时 range.text 最终为空。但是,我遇到了另一个我没有找到解决方案的问题。也就是说,如果用户双击一个单词,从而选择它,则根本不会引发 selectionchange 事件。另外,当 click 事件(或 mousedown 事件或 selectstart 事件)引发时,range.text 仍然为 null!
我该如何解决后一个问题?还是我可以采取整体上更好的方法?
【问题讨论】:
标签: c# internet-explorer dom webbrowser-control dom-events