zoukankan      html  css  js  c++  java
  • 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进行操作。

  • 相关阅读:
    [转]快速矩阵快速幂
    继续学习C:数字进制表示
    pthread_cond_wait()用法分析
    [原]NYOJ-光棍的yy-655
    [原]NYOJ-组合数-32
    [转]_int64、long long 的区别
    [原]NYOJ-6174问题-57
    [转]sscanf函数具体用法
    [原]NYOJ-A*B Problem II-623
    集存款(复利单利)贷款为一体的计算器(最新版)
  • 原文地址:https://www.cnblogs.com/himax/p/9890153.html
Copyright © 2011-2022 走看看