2012-02-02 31 views
10

Tôi đang sử dụng điều khiển WebBrowser của WPF để tải một trang web đơn giản. Trên trang này tôi có một neo hoặc một nút. Tôi muốn nắm bắt sự kiện nhấp chuột của nút đó trong mã ứng dụng của tôi phía sau (ví dụ: trong C#).Điều khiển trình duyệt web: Cách chụp các sự kiện tài liệu?

Có cách nào để điều khiển WebBrowser nắm bắt các sự kiện nhấp trên các phần tử của trang đã tải không?

Ngoài ra, có thể truyền dữ liệu kích hoạt sự kiện giữa trang và Trình duyệt Web không? Tất cả những điều trên có thể là tôi đúng không?

  • Edit: giải pháp kiến:

Tôi đã tìm thấy đường dẫn sau đó có thể là một giải pháp. Tôi chưa thử nghiệm nó nhưng nó đáng để bắn. Sẽ cập nhật câu hỏi này tùy thuộc vào kết quả kiểm tra của tôi.

http://support.microsoft.com/kb/312777

  • liên kết lấy từ: Source

Trả lời

13

Ok trả lời tìm thấy - thử nghiệm và nó hoạt động:

  • Thêm một tài liệu tham khảo từ tab COM gọi: Microsoft HTML Object Thư viện

Sau đây là một ví dụ mã:

Bạn sẽ cần hai thành phần: WebBrowser (webBrowser1) và một TextBox (TextBox1)

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     webBrowser1.LoadCompleted += new LoadCompletedEventHandler(webBrowser1_LoadCompleted); 
    } 

    private void webBrowser1_LoadCompleted(object sender, NavigationEventArgs e) 
    { 
     mshtml.HTMLDocument doc; 
     doc = (mshtml.HTMLDocument)webBrowser1.Document; 
     mshtml.HTMLDocumentEvents2_Event iEvent; 
     iEvent = (mshtml.HTMLDocumentEvents2_Event)doc; 
     iEvent.onclick += new mshtml.HTMLDocumentEvents2_onclickEventHandler(ClickEventHandler); 
    } 

    private bool ClickEventHandler(mshtml.IHTMLEventObj e) 
    { 
     textBox1.Text = "Item Clicked"; 
     return true; 
    } 
} 
+1

Vì không có câu trả lời nào khác, tôi sẽ chọn câu trả lời này làm câu trả lời. Mặc dù tôi đã tìm thấy một cách tốt hơn để giải quyết vấn đề này. Phương thức này được mô tả trong http://www.codegain.com/articles/wpf/ieprogramming/working-with-webbrowser-in-wpf.aspx và nó sử dụng một lớp có tên là ObjectForScriptingHelper. Rất dễ thực hiện và hoạt động như một sự quyến rũ. – Bassem

+1

Dường như nó chỉ hoạt động 20% ​​thời gian cho tôi, phần lớn thời gian không gọi là "ClickEventHandler" mặc dù phương thức LoadCompleted hoàn tất mà không có ngoại lệ nào tôi có thể thấy ... Bất kỳ ý tưởng nào? Tôi đăng về nó ở đây: http://stackoverflow.com/questions/35058874/wpf-webbrowser-open-links-in-default-browser –

+1

Bài viết codegain được tham chiếu bởi @Bassem bây giờ có thể được tìm thấy ở đây: http: // www .dotnetfunda.com/articles/show/840/làm việc với webbrowser-in-wpf –

2

Dưới đây là một ví dụ khác.

Tôi đã cố gắng để tiêm một từ xa tập tin javascript và thực hiện một số mã khi đã sẵn sàng bằng cách thêm một phần tử DOM <script src="{path to remote file}" /> vào tiêu đề, về cơ bản các ý tưởng tương tự như jQuery.getScript(url, callback) ..

Đoạn code dưới đây hoạt động tốt.

HtmlElementCollection head = browser.Document.GetElementsByTagName("head"); 
if (head != null) 
{ 
    HtmlElement scriptEl = browser.Document.CreateElement("script"); 
    IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement; 
    element.src = url; 
    element.type = "text/javascript"; 
    head[0].AppendChild(scriptEl); 
    // Listen for readyState changes 
    ((mshtml.HTMLScriptEvents2_Event)element).onreadystatechange += delegate 
    { 
     if (element.readyState == "complete" || element.readyState == "loaded") 
     { 
      Callback.execute(callbackId); 
     } 
    }; 
} 
Các vấn đề liên quan