2013-09-06 3 views
1

Я в состоянии получить выделенный текст элемента управления WebBrowser в WPF следующий:как получить выделенный текст в обозревательУправлении

IHTMLDocument2 doc1 = webBrowser.Document as IHTMLDocument2; 
     IHTMLDocument3 doc = webBrowser.Document as IHTMLDocument3; 

     IHTMLSelectionObject currentSelection = doc1.selection; 

     if (doc1.selection.type == "Text") 
     { 
      IHTMLTxtRange range = (IHTMLTxtRange)doc1.selection.createRange(); 
     } 

Это работает просто отлично, и если установить значение range.text на что-то другое он изменяет значение текста. Единственная проблема, с которой я столкнулась, - это веб-страницы, такие как Gmail, которые на ней имеют какой-то редактор WYSIWYG, параметр selection.type всегда «None». Я подозреваю, что это потому, что текстовый редактор технически является детским документом. Я не уверен, как найти дочерние документы и проверить, выбран ли текст. Может кто-нибудь мне помочь? Благодаря!

ответ

2

Вы можете проверить, если document.activeElement является кадром и имеет свойство contentWindow (document.activeElement.contentWindow != null) Тогда вы могли бы использовать contentWindow.document, чтобы добраться до внутренней document фрейма. Сделайте это рекурсивно, пока не найдете рамку с document.selection != null.

Чтобы проиллюстрировать это:

main.html:

<!DOCTYPE html> 
<body> 
<iframe src="iframe.html"></iframe> 
</body> 

iframe.html:

<!DOCTYPE html> 
<head> 
<script> 
window.onload = function() 
{ 
    window.focus(); 
    document.execCommand("SelectAll", false); 
} 
</script> 
</head> 
<body contentEditable="true"> 
This is editable 
</body> 

C#

var text = this.wb.Document.InvokeScript("eval", new object[] { 
    "document.activeElement.contentWindow.document.selection.createRange().text" }); 
MessageBox.Show(text.ToString()); 

Шоу:

Это редактируемые

Смежные вопросы