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#如何拦截 Webbrowser Control的响应内容的更多相关文章
- .net core MVC 通过 Filters 过滤器拦截请求及响应内容
前提: 需要nuget Microsoft.Extensions.Logging.Log4Net.AspNetCore 2.2.6: Swashbuckle.AspNetCore 我暂时用的是 ...
- Web Service之Soap请求响应内容中文编码解密
java模拟Soap请求测试Web Service接口,发现Web Service响应内容中的中文竟然是编码格式.比如: 中文:退保成功 Soap中文编码:退保成功 我仔细分析后发现,退编码实际上 ...
- WebBrowser Control
https://msdn.microsoft.com/en-us/library/aa752040(v=vs.85).aspx WebBrowser Control
- [Java] 两种发起POST请求方法,并接收返回的响应内容的处理方式
1.利用apache提供的commons-httpclient-3.0.jar包 代码如下: /** * 利用HttpClient发起POST请求,并接收返回的响应内容 * * @param url ...
- Fiddler插件 --- 解密Elong Mapi请求参数及响应内容
当前问题: 在我们日常的Web/App测试过程中, Fiddler是一大辅助利器:在我们团队,也经常使用Fiddler进行App抓包测试. 艺龙 App使用的REST(内部称为Mapi)接口,在使用过 ...
- 使用FreeCookies 控制浏览器cookies及修改http响应内容
FreeCookies 插件安装 :您的计算机需要已经安装Fiddler (如未安装,请至官网下载安装 http://docs.telerik.com/fiddler/configure-fiddle ...
- nginx替换响应内容
因为想要将非业务域名内嵌到微信小程序中,所以用到了nginx的反向代理功能来替换域名实现盗站(缘起:http://www.cnblogs.com/kenwar/p/8288882.html),但是替换 ...
- node.js学习4--------------------- 根据不同路径来响应内容,以及中文乱码的解决
/** * http服务器的搭建,相当于php中的Apache或者java中的tomcat服务器 */ // 导包 const http=require("http"); //创建 ...
- Django(十一)请求生命周期之响应内容(请求/响应 头/体)
https://www.cnblogs.com/renpingsheng/p/7534897.html Django请求生命周期之响应内容 http提交数据的方式有"post",& ...
随机推荐
- 处理 Vue 单页面应用 SEO
由于在vue单页应用中title只设定在入口文件index.html,如果切换路由,title怎么更换? 在路由router中设置meta: { path:'/chooseBrand', compon ...
- sklearn中的损失函数
python风控评分卡建模和风控常识(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005214003&am ...
- Python高级笔记(三) -- 私有化
1. 类型1 2. 多模块开发 2.1 import 2.2 from xxx import MyName 区分 import xxx ==> xxx.MyName 可以修改 from xxx ...
- 关于APP测试的一点思考
1 系统入口部分要细化测试用例颗粒度 充分准备好测试数据 真实覆盖线上场景 比如注册验证码的获取 国内 国外手机 一般国外手机发送短信 打电话都要加上区号 2 新版本发布 有新功能上线 ...
- webpack-dev-server live reloading 技术实现
webpack-dev-server live reloading https://github.com/webpack/webpack-dev-server Use webpack with a ...
- java基础 关于final修饰符
final作为一个修饰符,可以修饰类.变量.函数. 1.被final修饰的类不可以被继承(保护封装性),为了避免被继承,被子类复写: 2.被final修饰的函数不可以被复写 3.被final修饰的变量 ...
- Linux 文件格式转码工具
Linux 系统下文件编码转换格式工具 ICONV 下载 https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz 源码安装: $ ./con ...
- windows系统安装gcc编译器----c/c++语言编译器
1.安装MinGW编译管理安装软件 官方下载:https://osdn.net/projects/mingw/releases/ 作者百度云备份下载:https://pan.baidu.com/s/1 ...
- httpclient用getStatusCode
TP 定义的状态代码的值(.net HttpWebResponse.HttpStatusCode 成员名称 说明 Continue 等效于 HTTP 状态 100.Continue 指示客户端可能 ...
- 小程序git发布
微信小程序提交项目: 1.码云上创建一个项目 xiaochengxu 2.本地创建一个文件夹,然后在控制台使用 cd 文件夹名字 (将文件拉到控制台) 3.使用 git init 命令 ,初始化一个g ...