Có một C# WebBrowser
control bên trong ứng dụng WinForms của tôi, và nhận thức được Navigating
event, tôi không bao giờ đưa ra một giải pháp tốt đẹp và thanh lịch như sau:Cách phân biệt giữa người dùng nhấp vào liên kết và trang đang thực hiện chuyển hướng tự động?
- Nếu người dùng tích cực điều hướng tới một URL khác, tôi muốn cho phép nó.
- Nếu trang chuyển hướng "tự nó" sang một URL khác, tôi muốn hủy trang đó.
Đối trường hợp 1 có một số trường hợp tôi có thể nghĩ:
- Người dùng nhấp thẻ
a
và thuộc tínhhref
được đánh giá để tải URL khác. - Lần nhấp của người dùng trên một phần tử có một trình xử lý sự kiện javascript
onclick
gọi một chức năng sử dụngwindow.location
để tải một URL khác.
Đối trường hợp 2 tôi có tưởng tượng của:
- Trang tải chứa một thẻ
iframe
mà tải một URL bên trong IFrame. Điều này kích hoạt sự kiệnNavigating
. - Có một số bộ đếm thời gian JavaScript được bắt đầu khi tải trang và khi nó kích hoạt, nó sử dụng
window.location
để tải một URL khác. - Trang được tải chứa
meta refresh
header tag để tải một URL khác sau một vài giây.
Vì vậy, câu hỏi của tôi là:
Làm thế nào để phát hiện bên trong Navigating
sự kiện (hoặc bất kỳ cơ chế khác) dù một chuyển hướng được kích hoạt một cách rõ ràng bởi người sử dụng hoặc ngầm bởi trang?
Một số biết thêm thông tin
- Các
WebBrowser
đang được sử dụng bên trong một cửa sổ ứng dụng dựa trên backend CMS. - Do đó, tôi có toàn quyền kiểm soát nội dung được tải bên trong điều khiển WebBrowser.
- Có nghĩa là tôi có thể thao tác chuỗi HTML hoàn chỉnh trước khi được gửi tới trình duyệt, nếu được yêu cầu.
- Nếu ứng dụng được áp dụng nhiều hơn, tôi cũng rất thích nhận các giải pháp chỉ JavaScript mà tôi có thể đưa vào HTML đang được tải.
(Xin lưu ý rằng tôi tin rằng đây không phải là một bản sao của this SO posting)