2012-01-15 9 views
5

Tworzę aplikację wpf, w której używam kontrolki przeglądarki. w każdym razie czasami muszę szukać elementów html, wywoływać kliknięcia i inne podstawowe funkcje.Kontrola przeglądarki WPF vs WinForm

w WinForms kontrola webbrowser jestem w stanie to osiągnąć, wykonując:

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

W formantu WebBrowser wpf udało mi się osiągnąć to samo, wykonując:

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

I udało się również powołać kliknij w kontrolce internetowej wpf, używając typu dynamicznego. Czasami jednak dostaję wyjątki.

Jak będę w stanie spojrzeć na elementów HTML, ustaw atrybuty i wywołać kliknięciami w wpf WebBrowser kontroli bez konieczności używania dynamicznych typów, gdzie często się wyjątki? Chciałbym zastąpić kontrolkę webmrowser mojego winForm w mojej aplikacji wpf za pomocą kontrolki wpf.

+1

Klasyfikatory WinForm HtmlDocument i HtmlElement są ładne. Ale będzie bombardować równie głośno, gdy DOM nie zawiera elementów lub atrybutów, które masz nadzieję, że to zrobi. One również wymagają, abyś wyraźnie sprawdził wartość zerową, aby uniknąć bomby. –

+0

Jestem pewien, że dokument zawiera elementy HTML, których szukam, ponieważ utworzyłem dokument HTML do celów testowych. ale tak, zgadzam się, zawsze będę sprawdzać zerowe wyjątki ... –

Odpowiedz

-3

Sposób, w jaki zrobili to ...

Pobierz tekst HTML strony chcesz, aby uczynić za pomocą HTTPRequest. Inject skrypt Java za pomocą pakietu agility HTML w tekście HTML. Jeśli chcesz użyć jQuery, musisz najpierw jQrealizować stronę, a następnie powiązać zdarzenie z elementami domowymi. Możesz również wywołać funkcję C# z poziomu skryptu i na odwrót. Bez problemów z typami dynamicznymi, a więc bez wyjątku.

Można także wyłączyć błąd skryptu w WC przy użyciu metody rozszerzenia na tym link.

This i this mogą pomóc.

1

Poniższa nazw w ten sposób można dostać się do wszystkich właściwości pierwiastków i właściwości Podprogram:

using mshtml; 

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

w konstruktora lub XAML ustawić zdarzenie LoadComplete:

webBrowser.LoadCompleted += webBrowser_LoadCompleted; 

następnie w tej metodzie Create Your nowy obiekt dokumentu przeglądarki i przeglądaj dostępne właściwości i twórz nowe zdarzenia w następujący sposób:

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 
    }