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

  • 相关阅读:
    支持向量机SVM知识点概括
    决策树知识点概括
    HDU 3081 Marriage Match II
    HDU 3572 Task Schedule
    HDU 4888 Redraw Beautiful Drawings
    Poj 2728 Desert King
    HDU 3926 Hand in Hand
    HDU 1598 find the most comfortable road
    HDU 4393 Throw nails
    POJ 1486 Sorting Slides
  • 原文地址:https://www.cnblogs.com/himax/p/9890153.html
Copyright © 2011-2022 走看看