# 使用指南 > 除通用的使用指南外,你可能还想通过[场景示例](./docs/recipes/index.zh_CN.md)了解特定场景下的使用方式,或是通过[设计文档](./docs)深入 rrweb 的技术细节。 ## 安装 ### 直接通过 ` ``` 也可以在 URL 中指定具体的版本号,例如: ```html ``` #### 仅引入录制部分 rrweb 代码分为录制和回放两部分,大多数时候用户在被录制的应用中只需要引入录制部分代码。同样可以通过使用 @rrweb/record 包和 CDN 服务来实现: ```html ``` #### 其他包 除了 `rrweb` 和 `@rrweb/record` 包之外,rrweb 还提供了其他不同用途的包。 - [rrweb](packages/rrweb):rrweb 的核心包,包括录制和回放功能。 - [rrweb-player](packages/rrweb-player):rrweb 的图形用户界面,提供时间线和暂停、快进、加速等按钮。 - [rrweb-snapshot](packages/rrweb-snapshot):处理快照和重建功能,将 DOM 及其状态转换为可序列化的数据结构。 - [rrdom](packages/rrdom):rrweb 的虚拟 dom 包。 - [rrdom-nodejs](packages/rrdom-nodejs):用于服务器端 DOM 操作的 rrdom 的 Node.js 版本。 - [@rrweb/all](packages/all):一个包含 `rrweb` 和 `@rrweb/packer`,便于安装的包。 - [@rrweb/record](packages/record):一个用于录制 rrweb 会话的包。 - [@rrweb/replay](packages/replay):一个用于回放 rrweb 会话的包。 - [@rrweb/packer](packages/packer):一个用于打包和解包 rrweb 数据的包。 - [@rrweb/types](packages/types):包含 rrweb 包中共享的类型定义。 - [@rrweb/utils](packages/utils):包含 rrweb 包中共享的工具函数。 - [web-extension](packages/web-extension):rrweb 的网页扩展。 - [rrvideo](packages/rrvideo):一个用于处理 rrweb 中视频操作的包。 - [@rrweb/rrweb-plugin-console-record](packages/plugins/rrweb-plugin-console-record):一个用于记录控制台日志的插件。 - [@rrweb/rrweb-plugin-console-replay](packages/plugins/rrweb-plugin-console-replay):一个用于回放控制台日志的插件。 - [@rrweb/rrweb-plugin-sequential-id-record](packages/plugins/rrweb-plugin-sequential-id-record):一个用于记录顺序 ID 的插件。 - [@rrweb/rrweb-plugin-sequential-id-replay](packages/plugins/rrweb-plugin-sequential-id-replay):一个用于回放顺序 ID 的插件。 - [@rrweb/rrweb-plugin-canvas-webrtc-record](packages/plugins/rrweb-plugin-canvas-webrtc-record):一个用于通过 WebRTC 流式传输 `` 的插件。 - [@rrweb/rrweb-plugin-canvas-webrtc-replay](packages/plugins/rrweb-plugin-canvas-webrtc-replay):一个用于通过 WebRTC 播放流式 `` 的插件。 ### 通过 npm 引入 ```shell npm install --save rrweb ``` rrweb 同时提供 commonJS 和 ES modules 两种格式的打包文件,易于和常见的打包工具配合使用。 ### 兼容性 由于使用 `MutationObserver` API,rrweb 不支持 IE11 以下的浏览器。可以从[这里](https://caniuse.com/#feat=mutationobserver)找到兼容的浏览器列表。 ## 快速开始 ### 录制 如果通过 ` ``` 或者通过 npm 安装: ```shell npm install --save rrweb-player ``` ```js import rrwebPlayer from 'rrweb-player'; import 'rrweb-player/dist/style.css'; ``` ##### 使用 通过 props 传入 events 数据及配置项 ```js new rrwebPlayer({ target: document.body, // 可以自定义 DOM 元素 // 配置项 props: { events, }, }); ``` ##### 配置项参数 | key | 默认值 | 功能 | | -------------- | ------------ | ----------------------------------------------------- | | events | [] | 包含回放所需的数据 | | width | 1024 | 播放器宽度 | | height | 576 | 播放器高度 | | autoPlay | true | 是否自动播放 | | speedOption | [1, 2, 4, 8] | 倍速播放可选值 | | showController | true | 是否显示播放器控制 UI | | tags | {} | 可以以 key value 的形式展示自定义事件在时间轴上的颜色 | | ... | - | 其它所有 rrweb Replayer 的配置参数均可透传 | #### 事件 开发者可能希望监听回放时的各类事件,例如在跳过无用户操作的时间时给用户一些提示。 rrweb 的 Replayer 提供了 `on` API 用于提供该功能 ```js const replayer = new rrweb.Replayer(events); replayer.on(EVENT_NAME, (payload) => { ... }) ``` 其包含的事件如下: | 事件类型 | 描述 | 值 | | ---------------------- | ---------------------- | ----------------- | | start | 回放开始 | - | | pause | 回放暂停 | - | | finish | 回放完成 | - | | resize | 回放视图大小发生变化 | { width, height } | | fullsnapshot-rebuilded | 全量快照完成重建 | event | | load-stylesheet-start | 开始加载远端样式表 | - | | load-stylesheet-end | 加载远端样式表完成 | - | | skip-start | 开始跳过无用户操作时间 | { speed } | | skip-end | 结束无用户操作时间 | { speed } | | mouse-interaction | 回放鼠标交互事件 | { type, target } | | event-cast | 回放 event | event | | custom-event | 回放自定义事件 | event | | destroy | 销毁播放器 | - | 使用 `rrweb-player` 时,也可以通过 `addEventListener` API 使用相同的事件功能,并且会获得 3 个额外的事件: | 事件类型 | 描述 | 值 | | ---------------------- | -------------- | ----------- | | ui-update-current-time | 当前回放时间点 | { payload } | | ui-update-player-state | 当前回放状态 | { payload } | | ui-update-progress | 当前回放百分比 | { payload } | ## REPL 工具 在不安装 rrweb 的情况下,也可以通过使用 REPL 工具试用 rrweb 录制 web 应用。 运行 `yarn repl`,将会启动浏览器并在命令行要求输入一个测试的 url: ``` Enter the url you want to record, e.g https://react-redux.realworld.io: ``` 输入后等待浏览器打开指定页面,并在命令行中出现以下提示信息: ``` Enter the url you want to record, e.g https://react-redux.realworld.io: https://github.com Going to open https://github.com... Ready to record. You can do any interaction on the page. Once you want to finish the recording, enter 'y' to start replay: ``` 此时可以在页面中进行交互,待所需录制操作完成后,在命令行输入 y,测试工具就会将刚刚的操作进行回放,用于验证录制是否成功。 回放时命令行中将出现以下提示信息: ``` Enter 'y' to persistently store these recorded events: ``` 此时可以再次在命令行中输入 y,测试工具将把已录制的内容存入一个静态 HTML 文件中,并提示存放位置: ``` Saved at PATH_TO_YOUR_REPO/temp/replay_2018_11_23T07_53_30.html ``` 该文件默认使用最新 bundle 的 rrweb 代码,所以我们可以在修改代码后运行 `npm run bundle:browser`,之后刷新静态文件就可以查看最新代码对回放的影响并进行调试。