【问题标题】:Issues retrieving selected text from IE browser从 IE 浏览器检索选定文本的问题
【发布时间】: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


    【解决方案1】:

    尝试使用 ondragend 事件进行简单选择,使用 ondblclick 事件进行双击选择。如果不起作用,请尝试组合一些事件 (http://javascript.gakaa.com/c/events.aspx)

    【讨论】:

    • 使用 dblclick 事件解决了单字双击选择的问题。感谢您指出该事件 - 我没有注意到它可能是由于缺少元音。微软某人的键盘显然坏了。至于 ondragend 事件,它实际上并不适用,因为拖动选择不是 DnD 操作。所以现在在我的程序中,我只是将所有三个事件 - selectionchange、click 和 dblclick - 路由到保存 range.text 值的同一个处理程序。
    猜你喜欢
    • 1970-01-01
    • 2016-04-20
    • 2013-04-04
    • 1970-01-01
    • 2013-11-25
    • 2013-09-22
    • 2020-06-06
    • 2011-04-14
    • 1970-01-01
    相关资源
    最近更新 更多