摘要: 网页应该如何录屏呢?javascript
Fundebug经受权转载,版权归原做者全部。css
初步思路html
方式一:前端
方式二:java
现有SDKnode
Fundebuggit
html2canvas 是经过分析页面中已加载好的 DOM 元素,而后 canvas 将生成的 DOM 节点绘制在画布上,最后转换为图片。它不是真正的截屏,只是根据页面元素信息还原出图片,因此并非 100% 和页面相同的。github
局限性web
浏览器支持编程
Puppeteer 是 Google Chrome 团队官方的无界面(Headless)Chrome 工具,它是一个 Node 库,提供了一个高级的 API 来控制 DevTools协议上的无头版 Chrome 。
局限性
功能
结论html2canvas 更适合于 C 端的用户行为截图跟踪,而 Puppeteer 适用于自动化测试。
rrweb 主要由 3 部分组成:
rrweb适用场景:
局限性
最终结论
综合来看,结合思路一,基于 rrweb 来开发是最可行最快捷的。
目前,我基于 rrweb 已经作了个 demo 出来。如下是初步成果:demo代码
Mutation Observer API 用来监视 DOM 变更。DOM 的任何变更,好比节点的增减、属性的变更、文本内容的变更,这个 API 均可以获得通知。
特色
example
Select the node that will be observed for mutations var targetNode = document.getElementById('some-id');
// Options for the observer (which mutations to observe) var config = { attributes: true, childList: true, subtree: true }; // Callback function to execute when mutations are observed var callback = function(mutationsList, observer) { for (var mutation of mutationsList) { if (mutation.type == "childList") { console.log("A child node has been added or removed."); } else if (mutation.type == "attributes") { console.log( "The " + mutation.attributeName + " attribute was modified." ); } } }; // Create an observer instance linked to the callback function var observer = new MutationObserver(callback); // Start observing the target node for configured mutations observer.observe(targetNode, config); // Later, you can stop observing observer.disconnect();
observe方法接受两个参数,第一个是所要观察的DOM元素是article,第二个是所要观察的变更类型(子节点变更和属性变更),方法调用时必须指定一种或多种变更类型,不然报错,变更类型以下:
boolean childList = false; boolean attributes; boolean characterData; boolean subtree = false; //表示是否将该观察器应用于该节点的全部后代节点。 boolean attributeOldValue; //表示观察attributes变更时,是否须要记录变更前的属性值。 boolean characterDataOldValue; //表示观察characterData变更时,是否须要记录变更前的值。 sequence<DOMString> attributeFilter;//数组,表示须要观察的特定属性(好比['class','src'])
disconnect方法用来中止观察。调用该方法后,DOM 再发生变更,也不会触发观察器。 takeRecords方法用来清除变更记录,即再也不处理未处理的变更。该方法返回变更记录的数组。
MutationRecord对象
DOM 每次发生变化,就会生成一条变更记录(MutationRecord 实例)。该实例包含了与变更相关的全部信息。Mutation Observer 处理的就是一个个MutationRecord实例所组成的数组。 MutationRecord对象包含了DOM的相关信息,有以下属性:
type:观察的变更类型(attribute、characterData或者childList)。 target:发生变更的DOM节点。 addedNodes:新增的DOM节点。 removedNodes:删除的DOM节点。 previousSibling:前一个同级节点,若是没有则返回null。 nextSibling:下一个同级节点,若是没有则返回null。 attributeName:发生变更的属性。若是设置了attributeFilter,则只返回预先指定的属性。 oldValue:变更前的值。这个属性只对attribute和characterData变更有效,若是发生childList变更,则返回null。
Fundebug专一于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java线上应用实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了20亿+错误事件,付费客户有阳光保险、核桃编程、荔枝FM、掌门1对一、微脉、青团社等众多品牌企业。欢迎你们免费试用!