2017-10-14 1 views
0

Ich habe eine WPF-Benutzersteuerung, die eine ASP.Net MVC-Anwendung mit dem Webbrowser-Steuerelement hostet.triggern ein Ereignis zum Hosten von WPF-Anwendung von Webbrowser-Steuerelement

Ich möchte die usercontrol benachrichtigen, wenn eine bestimmte Aktion auf der WebApplication durchgeführt wird. Was sind die Möglichkeiten, dies zu erreichen?

+0

Können Sie die ASP.NET-Anwendung ändern? Wenn ja, dann können Sie die 'ObjectForScripting' -Eigenschaft des Browser-Steuerelements auf eine Instanz einer Klasse setzen, die von der Site von JavaScript über' window.external' aufgerufen werden kann. –

Antwort

1

Als @Szabolcs Dézsi im Kommentar erwähnt, wenn Sie den Zugriff auf Web-Anwendung haben, können Sie WebBrowser.ObjectForScripting zu Instanz eines Objekts verwenden und rufen Sie die Methode von Javascript. Hier ist eine einfache Demo:

[ComVisible(true)] // Class must be ComVisible 
public class Demo 
{ 
    public void SayHello(string name) => MessageBox.Show($"Hello {name} !!!"); 
} 

eine Instanz dieser Klasse erstellen ein weisen es ObjectForScripting Eigenschaft des WebBrowser-Steuerelement:

webBrowser.ObjectForScripting = new Demo(); 

und sagen, diese einfache HTML-Seite, die wir in der WebBrowser Kontrolle angezeigt werden :

Wenn Sie nun einen Namen eingeben und auf die Schaltfläche SayHello klicken, wird MessageBox wie erwartet angezeigt.

Auch Sie haben die Eigenschaft WebBrowser.Document, die eine Instanz von HtmlDocument, die in Microsoft HTML Object Library (MSHTML) Com-Bibliothek lebt, stellen Sie sicher, dass es in Ihrem Projekt zu verweisen.

Die Document-Eigenschaft können Sie das DOM-Objekt der aktuellen Seite abfragen und durch sie können Sie Ihre HTML-Seite wie in Javascript über Methode von HtmlDocument Klasse wie HtmlDocument.getElementById() und viele andere freigelegt.

webBrowser.LoadCompleted += new LoadCompletedEventHandler((o, e) => 
{ 
    if (webBrowser.Document is HTMLDocument DOM) 
    { 
     var namefield = DOM.getElementById("name"); 
     namefield.setAttribute("value", "Enter your name!!!"); 
    } 
}); 

Hope this Sie die Macht verstehen hilft, die WebBrowser Steuerung geladen Seiten zu manipulieren bietet:

zum Beispiel dieser Code den Wert Attribut Namenseingabe von oben HTML-Seite für Seite ändern wird von WebBrowser Steuerelement geladen .

+1

das ist eine sehr gute Erklärung. Versuchte das gleiche und funktioniert wie ein Charme! Vielen Dank! – user2143645

Verwandte Themen