場景目標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進行操做。