2010-11-20 6 views
6

Tôi đang cố gắng tạo trình duyệt web tùy chỉnh dựa trên điều khiển trình duyệt Web WPF. Tôi đã triển khai giao diện IWebBrowser2 com và triển khai các trình xử lý cho các sự kiện Navigating(), NavigatedTo()LoadCompleted(). Nhưng các cuộc gọi lại sự kiện này chỉ được kích hoạt một lần cho trang cấp cao nhất. Giả sử một trang có một số tập lệnh java, css và hình ảnh trong đó; trình duyệt phát ra các yêu cầu HTTP riêng biệt để tải xuống các tệp này. Chúng tôi muốn nắm bắt các sự kiện yêu cầu HTTP riêng lẻ. Ví dụ: nếu cấu trúc của trang HTML làLàm cách nào để nhận URL mà sự kiện downloadBegin() được kích hoạt?

<html> 
    <body> 
    <img src="img1.bmp"/> 
    <imp src="img2.bmp"/> 
    </body> 
</html> 

Tôi muốn ghi lại thời gian tải xuống riêng lẻ cho img1.bmp và img2.bmp. Ai đó có thể đề nghị một cách để đạt được điều này?

Trong khi đó, tôi thấy rằng sự kiện downloadbegin() của DWebBrowserEvents_Event được kích hoạt cho các yêu cầu này cho hình ảnh, v.v ... nhưng tôi không thể lấy URL mà từ đó nó tải xuống, vì trình xử lý mất hiệu lực làm tham số.

Vì vậy, có bất kỳ cách nào để tôi có thể nhận URL tương ứng vì có sự kiện là downloadComplete được kích hoạt khi quá trình tải xuống hoàn tất. Vì vậy, tôi có thể thực hiện theo cách đó.

Nhưng tôi phải giải quyết thời gian hiển thị hình ảnh ở trên. Tôi bị mắc kẹt nặng. Xin hãy giúp tôi ....

Trả lời

0

tôi không có kiến ​​thức sâu về lớp này nhưng tôi đã đọc một chút. trong mdsn họ nói về sự kiện downloadbegin(): http://msdn.microsoft.com/en-us/library/cc136556(v=vs.85).aspx

Sự kiện này là bắn ngay sau các DWebBrowserEvents :: kiện BeforeNavigate hoặc sự kiện DWebBrowserEvents2 :: BeforeNavigate2, trừ trường hợp điều hướng được hủy bỏ. Mọi chỉ báo hoạt ảnh hoặc "bận" mà vùng chứa phải hiển thị phải được kết nối với sự kiện này.

và khi tôi kiểm tra BeforeNavigate tôi thấy rằng nó có một url trong paramaters của nó tôi thấy điều này (không MSDN nhưng nó chỉ hợp lý rằng Mình vẫn có một url) http://blog.yezhucn.com/progie/222647_beforenavigate.htm

trống BeforeNavigate (
IDispatch * pDisp, VARIANT * & url, VARIANT * & Flags, VARIANT * & TargetFrameName, VARIANT * & POSTDATA, VARIANT * & Tiêu đề, VARIANT_BOOL * & Hủy );

vì vậy nếu bạn luôn có sự kiện BeforeNavigate, bạn có thể sử dụng url của nó và kiểm tra sự kiện hoàn tất tải xuống tiếp theo được kết nối với sự kiện DownloadBegin. đoán của tôi là cho mỗi tải nó làm cho một sự kiện BeforeNavigate nhưng tôi sẽ không biết vì tôi không thể thử (không có mã để kiểm tra nó trên) nhưng tôi hy vọng nó sẽ giúp đỡ.

+2

BeforeNavigate chỉ được gọi một lần, không một lần cho mỗi tệp được tải xuống cho trang. –