C#如何攔截 Webbrowser Control的響應內容

場景目標html

假如Webbrowser中的一個頁面打開後第一件事就是執行了alert,咱們想要阻止它該如何作?瀏覽器

<html>
  <head>
  <script src="foo.js"> </script>
  <script>
    alert('alert immediate!');
  </script>
  </head>
<body>
<h2> hello</h2>
</body>
</html>

綁定DocumentComplete事件,不行,太晚了js早已執行。網絡

綁定ProgressChanged事件,不行,雖然早於load事件,但仍是晚於js執行時間。測試

以上支持的事件根本沒法達到目的,因而嘗試過FiddlerCore利用中間代理原理過濾網絡響應內容。spa

代理法雖然能夠達到目的,但證書安裝、代理設置、網絡開銷都顯得不那麼優雅穩定。代理

Navigated事件htm

一直覺得Navigated事件是在發出請求後就觸發,最近忽然發現並非這樣。對象

通過測試,Navigated會在html裏第一個script開始執行前觸發,這時加載的html會被截斷到第一個script標籤位置。blog

也就是說當此事件觸發時,瀏覽器內加載的html爲事件

<html>
  <head>
  <script src="foo.js"> </script>
  </head>
</html>

不過這時window、document等對象都已存在,因而咱們就能夠愉快地進行操做了。

注意:

1.主窗口及iframe均可觸發

2.觸發時頁面內js還沒有執行

3.因爲此事件早於任何js代碼的執行時間,因此沒法實現對頁面內Js方法的覆蓋

4.若是第一個script在head裏,也沒法實現對HTML的修改 :)

5.若是動態插入script標籤或利用其它延時原理,有可能會在頁面的某個script標籤後執行,但執行前後次序極不可控,意義不大。

總結

此事件適用於須要在任何js執行前進行自定義操做的場景,操做內容限於對window、document對象的處理;若是第一個script標籤在body中,還能夠對以前的html進行操做。

相關文章
相關標籤/搜索