Элемент управления WebBrowser .NET - Как должен взаимодействовать этот элемент управления? - PullRequest
5 голосов
/ 27 июля 2011

Я пытаюсь освоить элемент управления WebBrowser для использования в приложении для извлечения данных, которое я создаю.

Одним из требований здесь является возможность записи действий пользователя и их воспроизведения. Хотя у меня небольшой успех, я не понимаю, правильно ли я поступаю.

Кажется, в сети есть примеры кода, которые используют элемент управления совершенно по-разному. Не говоря уже о том, что есть реализация WinForms , реализация WPF и реализация Silverlight .

Может ли кто-нибудь подтвердить:

  1. Прав ли я в своих выводах настолько, что версия элемента управления WPF не обладает той же функциональностью, что и версия WinForms, и несколько ограничена с точки зрения реакции на некоторые события?

  2. Почему кто-то решил использовать классы на основе mshtml при использовании элемента управления, когда, по-видимому, в WinForms, по крайней мере, эквивалентные средства для выполнения той же задачи существуют в классах Windows Forms?

Примеры * * 1 027 Winforms Щелкните по дескриптору события void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { foreach (HtmlElement ele in uc_webBrowser.Document.All) { HtmlElementEventHandler eventhandler = new HtmlElementEventHandler(documentClickHandler); if (ele.TagName.ToLower() == "a" || ele.TagName.ToLower() == "input" || ele.TagName.ToLower() == "select" || ele.TagName.ToLower() == "img") { ele.Click -= eventhandler; ele.Click += eventhandler; } } } Нажмите дескриптор события, используя mshtml классы void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e) { // Add doc null check otherwise the event handlers are assigned multiple times // /4087433/pochemu-htmldocumentevent-onclick-zapuskaetsya-neskolko-raz if (doc == null) { var eventHdlr = new mshtml.HTMLDocumentEvents2_onclickEventHandler(ClickEventHandler); doc = (mshtml.HTMLDocument)webBrowser1.Document.DomDocument; mshtml.HTMLDocumentEvents2_Event iEvent = (mshtml.HTMLDocumentEvents2_Event)doc; iEvent.onclick -= eventHdlr; iEvent.onclick += eventHdlr; //iEvent.oncellchange += new HTMLDocumentEvents2_oncellchangeEventHandler(iEvent_oncellchange); //iEvent.oncontrolselect += new HTMLDocumentEvents2_oncontrolselectEventHandler(iEvent_oncontrolselect); //iEvent.onselectionchange += new HTMLDocumentEvents2_onselectionchangeEventHandler(iEvent_onselectionchange); } }

Ответы [ 2 ]

1 голос
/ 03 августа 2011

Несколько лет назад я реализовал довольно сложный WYSIWYG-редактор, используя WinForms WebBrowser, тогда браузером был IE 7 (там был тот или Firefox 1 или 2, я не помню). Если вы зайдете дальше, чем загрузка страницы в браузере, вы увидите, что MSHTML PIA - это боль для работы.

Поведение компонента браузера не было на 100% детерминированным в IE 7 (возможно, это изменилось в IE 9, но, что еще хуже, вам, возможно, придется иметь дело с различными версиями браузера Microsoft). Тем не менее, хорошо спроектированный слой OO превыше всего, что сделает чудеса для вашей производительности.

Я постараюсь ответить на ваши сомнения по поводу использования веб-браузера:

  1. По следующей ссылке в веб-браузере WPF вы получите столько же функциональности, сколько и с JavaScript. Так как макросы уже выполнялись в браузерах, у вас наверняка будет достаточно событий, чтобы делать то, что вы хотите.

    Какие функциональные различия существуют между WPF и WinForms WebBrowser?

  2. Если вам кажется, что вам не нужен элемент управления WebBrowser, запустите его, пока можете. Браузер в графическом интерфейсе рабочего стола может сильно помочь, но это обходится дорого.

Однако, если вам захочется его использовать, вы можете попробовать разные браузеры. Например, дизайнер ASP.NET в MonoDevelop был разработан с помощью Mozilla Composer (движок Gecko), и до того, как WebForms стали такими нежелательными, существовал проект по его разработке с использованием WebKit двигатель.

0 голосов
/ 29 июля 2011

Я написал кое-что о WebBrowser.Вы можете попробовать это, если хотите: http://www.dotnetfunda.com/articles/article840-working-with-webbrowser-in-wpf-.aspx

Спасибо

...