Управление веб-браузером WPF против winforms - PullRequest
5 голосов
/ 15 января 2012

Я создаю приложение wpf, в котором я использую элемент управления веб-браузера. В любом случае иногда мне нужно искать HTML-элементы, вызывать щелчки и другие основные функции.

В веб-браузере winforms я могу добиться этого, выполнив:

 webBrowser1.Document.GetElementById("someId").SetAttribute("value", "I change the value");

В управлении веб-браузером wpf мне удалось добиться того же, выполнив:

  dynamic d = webBrowser1.Document;  
  var el = d.GetElementById("someId").SetAttribute("value", "I change the value");

Мне также удалось вызвать щелчок в элементе управления веб-браузера wpf с помощью динамического типа. Иногда я получаю исключения.

Как я смогу искать элементы html, устанавливать атрибуты и вызывать клики в элементе управления веб-браузера wpf, не используя динамические типы, где я часто получаю исключения? Я хотел бы заменить свой элемент управления winforms webbrowser в моем приложении wpf элементом управления wpf webbrowser.

Ответы [ 2 ]

1 голос
/ 28 марта 2016

Используйте следующее пространство имен, чтобы получить доступ ко всем свойствам элементов и свойств обработчика событий:

    using mshtml;

    private mshtml.HTMLDocumentEvents2_Event documentEvents;
    private mshtml.IHTMLDocument2 documentText;

в конструкторе или xaml установите ваше событие LoadComplete:

    webBrowser.LoadCompleted += webBrowser_LoadCompleted;

, затем в этом методе создайте новый объект документа веб-браузера, просмотрите доступные свойства и создайте новые события следующим образом:

    private void webBrowser_LoadCompleted(object sender, NavigationEventArgs e)
    {
        documentText = (IHTMLDocument2)webBrowserChat.Document; //this will access the document properties as needed
        documentEvents = (HTMLDocumentEvents2_Event)webBrowserChat.Document; // this will access the events properties as needed
        documentEvents.onkeydown += webBrowserChat_MouseDown;
        documentEvents.oncontextmenu += webBrowserChat_ContextMenuOpening;
    }

    private void webBrowser_MouseDown(IHTMLEventObj pEvtObj)
    {
         pEvtObj.returnValue = false; // Stops key down
         pEvtObj.returnValue = true; // Return value as pressed to be true;
    }

    private bool webBrowserChat_ContextMenuOpening(IHTMLEventObj pEvtObj)
    {
        return false; // ContextMenu wont open
        // return true;  ContextMenu will open
        // Here you can create your custom contextmenu or whatever you want
    }
0 голосов
/ 17 января 2012

Я сделал это так ...

Загрузите HTML-текст страницы, которую вы хотите отобразить, используя HTTPRequest.Внедрить Java-скрипт, используя пакет agility HTML в тексте HTML.Если вы хотите использовать jQuery, вам нужно сначала jQuerify вашей страницы, а затем связать событие с вашими элементами dom.Вы также можете вызвать вашу функцию c # из скрипта и наоборот.Не возиться с динамическими типами и, следовательно, не исключение.

Вы также можете подавить ошибку сценария в вашем WC, используя метод расширения для этой ссылки .

This и это может помочь .

...