2012-01-15 22 views
5

Tôi đang tạo một ứng dụng wpf nơi tôi đang sử dụng điều khiển trình duyệt web. anyways đôi khi tôi bắt buộc phải tìm kiếm các phần tử html, gọi các nhấp chuột và các chức năng cơ bản khác.Điều khiển trình duyệt web WPF và biểu mẫu winforms

Trong winforms WebBrowser kiểm soát tôi có thể đạt được điều này bằng cách thực hiện:

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

Trong kiểm soát WebBrowser WPF Tôi quản lý để đạt được điều đó bằng cách thực hiện:

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

Tôi cũng cố gắng gọi một nhấp chuột trong điều khiển trình duyệt web wpf bằng cách sử dụng loại động. Đôi khi tôi nhận được exeptions mặc dù.

Làm cách nào để có thể tìm kiếm các phần tử html , đặt thuộc tính và gọi số nhấp chuột trong điều khiển trình duyệt web wpf mà không phải sử dụng các loại động mà tôi thường có ngoại lệ? Tôi sẽ muốn thay thế kiểm soát webformer winforms của tôi trong ứng dụng wpf của tôi bằng một điều khiển webwper wpf.

+1

Các lớp trình bao bọc Winmls HtmlDocument và HtmlElement rất đẹp. Nhưng nó sẽ chỉ nổ lớn khi DOM không chứa các yếu tố hoặc thuộc tính mà bạn hy vọng nó làm. Họ cũng yêu cầu bạn kiểm tra null một cách rõ ràng để tránh bom. –

+0

Tôi chắc chắn rằng tài liệu chứa các phần tử html mà tôi đang tìm kiếm vì tôi đã tạo tài liệu html cho mục đích thử nghiệm. nhưng vâng tôi đồng ý tôi sẽ luôn luôn kiểm tra sự vắng mặt ... –

Trả lời

-3

Cách tôi đã thực hiện việc này là ...

Tải xuống văn bản HTML của trang bạn muốn kết xuất bằng HTTPRequest. Tiêm kịch bản java bằng gói nhanh nhẹn HTML trong văn bản HTML. Nếu bạn muốn sử dụng jQuery thì bạn phải jQuerify trang của bạn đầu tiên và sau đó ràng buộc sự kiện với các yếu tố dom của bạn. Bạn cũng có thể gọi hàm C# của bạn từ bên trong tập lệnh và cách khác. Không gây rối với các loại động và do đó không có ngoại lệ.

Bạn cũng có thể chặn lỗi tập lệnh trong WC của bạn bằng cách sử dụng phương pháp mở rộng trên link này.

Thisthis có thể hữu ích.

1

Sử dụng không gian tên sau đó theo cách mà bạn có thể nhận được cho tất cả các đặc tính phần tử và các thuộc tính eventhandler:

using mshtml; 

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

trong constructor hoặc XAML thiết lập sự kiện LoadComplete của bạn:

webBrowser.LoadCompleted += webBrowser_LoadCompleted; 

sau đó trong phương pháp mà tạo của bạn đối tượng tài liệu webbrowser mới và xem các thuộc tính có sẵn và tạo các sự kiện mới như sau:

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 
    }