场景目标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进行操做。