补环境框架:sdenv版本更新V0.2.0
sdenv介绍: 基于jsdom和瑞数vmp开发的补环境框架,模拟浏览器执行网页代码。 对瑞数vmp原理感兴趣的可以参考作者另一个开源项目:rs-reverse(见github仓库)
此处版本更新,代码不向下兼容,sdenv版本为V0.2.0对应sdenv-extend版本为V1.3.0,更新改动如下:
- 去除单例创建实例方式;
- 增加完善chrome浏览器拟真,
window.Event
、window.XPathException
、window.prompt
的检测处理,恢复window.webkitRequestFileSystem
相关代码; - 样例文件调整。
1. 去除单例创建实例方式
在之前版本中,实例化sdenv后,由于同时赋值给Object.prototype.sdenv
,因此可以通过new SdenvExtend().sdenv()
或者Object.sdenv
都可以取到同一个sdenv对象,因此sdenv对象在程序整个生命周期内只会存在一个,这种单例实例化方式虽然可以给代码编写提供方便,但是如果要有新的任务时却只能通过运行新node命令实现,这在sdenv项目中是不合理的,但是在rs-reverse这种命令行工具是没有影响的。
因此通过同步升级sdenv-extend将实例化的sdenv对象复制到window变量中,然后在chrome端做兼容处理:
if (!window.sdenv) window.sdenv = new SdenvExtend();
需要注意的是,当给window赋予新属性值时会改变原有运行流程,但是不影响最终产生的cookie结果,所以通过合理剪枝可以大大减少原代码中逻辑量(可以减少60%的循环逻辑量)。
2. 完善chrome浏览器拟真
当前版本sdenv增加chrome环境补充,增加对window.Event
、window.XPathException
、window.prompt
的检测处理。
作者希望项目受益者不做伸手党,帮助完善项目,当前sdenv仍然只支持chrome浏览器的拟真,作者希望牛人们能一起完善其它浏览器,如Firefox、Safari等。
其它浏览器拟真可在chrome同级新建目录,如:./browser/firefox/
,引入并使用浏览器拟真示例:
const browser = require('sdenv/browser/');
browser(window, 'chrome');
3 样例文件调整
群里有牛人反馈example下使用了process.exit
方法退出程序不适合在真实环境中使用,因此将该方法改为window.close
方法,需要注意的是example目录为样例目录,代码仅供参考,牛人们可以参考example下的代码更方便得使用sdenv提供的api实现想要的功能。
同时作者优化example/use-remote代码以验证cookie的有效性,执行该样例代码结果如下: