Snapshot the DOM into a stateful and serializable data structure. Also, provide the ability to rebuild the DOM via snapshot.
This module export following methods:
snapshot will traverse the DOM and return a stateful and serializable data structure which can represent the current DOM view.
There are several things will be done during snapshot:
- Inline some DOM states into HTML attributes, e.g, HTMLInputElement's value.
- Turn script tags into
noscripttags to avoid scripts being executed. - Try to inline stylesheets to make sure local stylesheets can be used.
- Make relative paths in href, src, CSS to be absolute paths.
- Give an id to each Node, and return the id node map when snapshot finished.
rebuild will build the DOM according to the taken snapshot.
In browser environments, rebuild() is a low-level API and requires a document created by rebuildIntoSandboxedIframe(), unless UNSAFE_allowUnprotectedRebuild: true is passed. Untrusted replay data must not be rebuilt directly into the top-level document or a caller-created iframe document.
For browser usage, prefer rebuildIntoSandboxedIframe:
rebuildIntoSandboxedIframe requires an explicit root element.
const { iframe, node } = rebuildIntoSandboxedIframe(snapshot, {
root: document.body,
cache,
mirror,
});If you need to manage the iframe separately, create it with createSandboxedIframe() before calling rebuild().
If you intentionally accept the script-execution risk, pass UNSAFE_allowUnprotectedRebuild: true to rebuild.
There are several things will be done during rebuild:
- Add data-rrid attribute if the Node is an Element.
- Create some extra DOM node like text node to place inline CSS and some states.
- Add data-extra-child-index attribute if Node has some extra child DOM.
serializeNodeWithId can serialize a node into snapshot format with id.
buildNodeWithSN will build DOM from serialized node and store serialized information in the mirror.getMeta(node).
Become a sponsor and get your logo on our README on Github with a link to your site.
|
Yuyz0112 |
Yun Feng |
eoghanmurray |
Juice10 open for rrweb consulting |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|