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进行操做。

相关文章
相关标签/搜索