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


場景目標

假如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利用中間代理原理過濾網絡響應內容。

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

Navigated事件

一直以為Navigated事件是在發出請求后就觸發,最近突然發現並不是這樣。

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

也就是說當此事件觸發時,瀏覽器內加載的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進行操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM