2011-07-26 24 views
5

Hãy xem xét một kịch bản mà tôi có một điều khiển WebBrowser trong ứng dụng WPF. Trang web được tải bên trong Kiểm soát WebBrowser. Trang web chứa một nút. Trang web là ứng dụng ASP.NET.Làm thế nào để nắm bắt sự kiện bấm nút của trang web (mở bên trong Kiểm soát WebBrowser) trong biểu mẫu WPF?

Tôi muốn nắm bắt sự kiện nhấp nút của trang web vào Biểu mẫu WPF (lưu trữ Điều khiển WebBrowser). Có cách nào để đạt được chức năng này không?

Cảm ơn,

Tapan

Trả lời

6

Đây là mã mà nên làm chính xác những gì bạn muốn với ý kiến ​​để giải thích những gì đang xảy ra:

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); 
    } 
} 

Một số này được lấy từ http://beensoft.blogspot.com/2010/03/two-way-interaction-with-javascript-in.html

+0

Tôi tiếp tục bị loại trừ ngoại lệ: HRESULT 0x80020101. – Doug

Các vấn đề liên quan