2011-07-26 12 views
5

Rozważmy scenariusz, w którym mam kontrolę WebBrowser w aplikacji WPF. Strona internetowa jest ładowana wewnątrz formantu WebBrowser. Strona zawiera przycisk. Strona internetowa jest z aplikacji ASP.NET.Jak przechwycić zdarzenie click button strony internetowej (otwarte w przeglądarce WebBrowser Control) w formularzu WPF?

Chcę przechwycić zdarzenie click button strony internetowej w formularzu WPF (który obsługuje kontrolę WebBrowser). Czy istnieje sposób na osiągnięcie tej funkcjonalności?

Dzięki,

Tapan

Odpowiedz

6

Oto kod, który należy zrobić dokładnie to, co chcesz z komentarzami wyjaśnić co się dzieje:

public partial class MainWindow : Window 
{ 

    /// <summary> 
    /// This is a helper class. It appears that we can't mark the Window as ComVisible 
    /// so instead, we'll use this seperate class to be the C# code that gets called. 
    /// </summary> 
    [ComVisible(true)] 
    public class ComVisibleObjectForScripting 
    { 
     public void ButtonClicked() 
     { 
      //Do whatever you need to do. For now, we'll just show a message box 
      MessageBox.Show("Button was clicked in web page"); 
     } 
    } 

    public MainWindow() 
    { 
     InitializeComponent(); 
     //Pass an instance of our helper class as the target object for scripting 
     webBrowser1.ObjectForScripting = new ComVisibleObjectForScripting(); 
    } 

    private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     //Navigate to your page somehow 
     webBrowser1.Navigate("http://www.somewhere.com/"); 
    } 

    private void webBrowser1_LoadCompleted(object sender, NavigationEventArgs e) 
    { 
     //Once the document is loaded, we need to inject some custom JavaScript. 

     //Here is the JavaScript 
     var javascript = @" 
//This is the JavaScript method that will forward the click to the WPF app 
function htmlButtonClicked() 
{ 
    //Do any other procession...here we just always call to the WPF app 
    window.external.ButtonClicked(); 
} 

//Find the button that you want to watch for clicks 
var searchButton = document.getElementById('theButton'); 

//Attach an onclick handler that executes our function 
searchButton.attachEvent('onclick',htmlButtonClicked); 
"; 

     //Grab the current document and cast it to a type we can use 
     //NOTE: This interface is defined in the MSHTML COM Component 
     //  You need to add a Reference to it in the Add References window 
     var doc = (IHTMLDocument2)webBrowser1.Document; 

     //Once we have the document, execute our JavaScript in it 
     doc.parentWindow.execScript(javascript); 
    } 
} 

Niektóre z nich została podjęta z http://beensoft.blogspot.com/2010/03/two-way-interaction-with-javascript-in.html

+0

Ciągle otrzymuję wyjątek: HRESULT 0x80020101. – Doug

Powiązane problemy