2013-07-22 3 views
3

Пожалуйста, обратите внимание на следующую прекрасную статью доступной на MSDNКак получить интерфейс документа при размещении элемента управления WebBrowser?

Я нахожусь в процессе создания панели инструментов IE с помощью BandObjects

У меня есть доступ к WebBrowser Control, но не в состоянии создать экземпляр HTMLDocument который требуется изменить DOM.

Вот выдержка из моего кода:

// Registering for DocumentComplete envent 
Explorer.DocumentComplete += new SHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(Explorer_DocumentComplete); 

// I am not sure about the following function. 
// I am trying to do something as suggested in this MSDN article - 
// http://msdn.microsoft.com/en-us/library/aa752047%28v=vs.85%29.aspx#Document 

void Explorer_DocumentComplete(object pDisp, ref object URL) 
{ 
     IPersistStream pStream; 
     string htmlText = "<html><h1>Stream Test</h1><p>This HTML content is being loaded from a stream.</html>"; 

     HTMLDocumentClass document = (HTMLDocumentClass)this.Explorer.IWebBrowser_Document; 
     document.clear(); 
     document.write(htmlText); 
     IHTMLDocument2 document2 = (IHTMLDocument2)pDisp; 

     pStream = (IPersistStream)document2.queryCommandValue("IID_IHTMLDocument2"); 
     HtmlDocument objdec = webBroswer.Document; 
     objdec.Write(htmlText); 
} 
+1

Я не уверен, что вам нужно создать экземпляр. Я думаю, что у webbrowser есть свойство Document, указывающее на текущий загруженный документ. Используя методы webbrowser, вы можете загрузить (перейти) к другому документу – GolezTrol

+0

Это правильно. Чтобы этот вопрос был полезен, вам необходимо предоставить дополнительную информацию (например, ваш источник) и подробную информацию о том, что происходит с ошибками. – EricLaw

+0

@GolezTrol True, webbrowser имеет свойство документа. Но свойство не позволяет мне установить новый объект Document в текущий объект webbrowser. Мое требование - не перемещаться на другую страницу. Я просто хочу создать новый DOM локально и загрузить его в свойстве Webbroswer Document, чтобы изменения отображались в браузере. – Aakash

ответ

2

Вы только что получил немного потеряли в родной объектной модели IE. Это действительно заставляет загружать собственный HTML-код в браузер.

Это не проблема, если вы фактически используете элемент управления WebBrowser. Клей скрыт в оболочке .NET. Это супер просто, вы просто назначаете DocumentText property. Устроитель имущества заботится о hoopla. Вам не нужен обработчик событий DocumentCompleted, он все сворачивается в одну строку кода, которую вы можете поместить где угодно:

webBrowser1.DocumentText = "<h1>Hello world</h1>"; 
+0

+1 Очень приятно! Я так инвестировал в маршрут «IHTMLDocument2», что мне никогда не приходило в голову, что управление может сделать это так просто ... –

+0

@ Спасибо спасибо за ввод. На самом деле, это первое, что я пробовал без успеха. Это кажется очень прямым и надеется, что это сработает, но этого не произошло. Просмотрите [эту статью в MSDN] (http://msdn.microsoft.com/en-us/library/aa752047%28v=vs.85%29.aspx#Document). Он говорит _ [«Объектная модель DHTML используется для доступа к содержимому страницы HTML и управления ею и недоступна до загрузки страницы. Ваше приложение определяет, что страница загружается обработкой события DWebBrowserEvents2 :: DocumentComplete в WebBrowser control. "] _ – Aakash

+0

Да, это точно. Он применяется, когда вы хотите внести изменения в веб-страницу после ее загрузки.Вы не внесли изменений в свой фрагмент, вы полностью заменили его, поэтому гораздо проще использовать свойство DocumentText. Событие уже доступно, это WebBrowser.DocumentCompleted. Не нужно использовать собственное событие. Интерфейс IHtmlDocument2 также завернут, это свойство Document. Нельзя использовать родные COM-интерфейсы, вы можете, гораздо проще и удобнее использовать дружественные .NET-обертки. –