Commit Graph

888 Commits

Author SHA1 Message Date
Karl-Aksel Puulmann
ea0ac76418 Update rrwebPlayer types (#46)
Without this change, the following fails to compile in typescript:

```js
new rrwebPlayer({
                target: document.body,
                props: {
                    width: 900,
                    events,
                    autoPlay: true,
                },
            })
```
2020-10-10 09:05:10 +08:00
Eoghan Murray
665567119d Suspend mutations during snapshot (#385)
* The `processMutations` function needed to be bound to the `mutationBuffer` object, as otherwise `this` referred to the `MutationObserver` object itself

* Enable external pausing of mutation buffer emissions

 - no automatic pausing based on e.g. pageVisibility yet, assuming such a thing is desirable
   https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API
 - user code has to call new API method `freezePage` e.g. when page is hidden or after a timeout
 - automatically unpauses when the next user initiated event occurs
   (am assuming everything that isn't a mutation event counts as 'user initiated'
   either way think this is the correct thing to do until I see a counterexample
   of an event that shouldn't cause the mutations to be unbufferred)

* Avoid a build up of duplicate `adds` by delaying pushing to adds until emission time

* Need to export freezePage in order to use it from rrweb.min.js

* Add a test to check if mutations can be turned off with the `freezePage` method

* I noticed out of order ids (in terms of a DOM walk) in a FullSnapshot.  A DOM mutation was executed against the mirror asynchronously before it could be fully processed. This would lead to a situation in replay where a mutation is executed against a DOM tree that already has the mutation applied. This changeset fixes that by freezing any mutations until the snapshot is completed.

* Remove attribute modifications from a mutation event that were incorrect in that they were repeating the attributes of those nodes present in the 'adds' array of the same mutation

* I've manually verified that this empty text node is actually removed when the dropdown is opened:

document.getElementById('select2-results-1').childNodes
NodeList(2) [li.select2-results-dept-0.select2-result.select2-result-selectable.select2-highlighted, li.select2-results-dept-0.select2-result.select2-result-selectable]

and also that it is not reinstated after the second `await page.click('.select2-container');`

* Rearrange when removal happens in order to satisfy tests. I'm also reverting a recent test change (2600fe7) so that tests pass after this rearrangement; I believe that test change to still be the correct way of doing it, but maybe it is not strictly important that there are extra mutations on attributes of just added nodes

* As mutations are now paused during FullSnapshots, we shouldn't be counting this as a 'user emission'. We automatically emit mutations after unpause anyway ('emit anything queued up now')

* Ensure that we clear arrays before emitting, as the mutation could have the side effect of triggering a FullSnapshot (checkoutEveryNth), which would otherwise re-trigger emission of same mutation (through the new pause/fullsnapshot/mutationemit/unpause process)

* Don't let the programattic pausing during TakeFullSnapshot accidentally unpause a manual call to the API method `freezePage`

* Rename paused -> frozen for consistency and change to use getter/setter access methods
2020-10-04 20:54:10 +08:00
Yanzhen Yu
1251091d64 Release 0.8.3 2020-10-04 20:49:17 +08:00
Yanzhen Yu
57a124ff74 update typings 2020-10-04 20:48:51 +08:00
Eoghan Murray
8b0bc7c505 Preserve url quotes (#47)
* Preserve original quotes when rewriting CSS url() paths - important for inline SVG files which often have spaces

* Found an example in the wild with the 'charset=' part left off. This is supported by https://css-tricks.com/lodge/svg/09-svg-data-uris/ ... not sure why we aren't just testing for the 'data:' prefix here?

* Not sure why this is now coming back with a double quote after recent changes here; it's supposed to preserve the single quote from style.css??
2020-10-04 20:46:57 +08:00
yz-yu
3e18d20418 fix docs link (#386) 2020-10-01 22:19:04 +08:00
yz-yu
c0f8902410 Update zh_CN Docs (#384)
* update zh_CN guide, with latest API and options

* add receipes

* update receipes and guide

* update #329 add links to README
2020-10-01 22:12:54 +08:00
Yanzhen Yu
4cff4225cf Release 0.6.2 2020-10-01 22:04:24 +08:00
Yanzhen Yu
459f8249b6 export speed as props 2020-10-01 15:24:57 +08:00
Yanzhen Yu
1277dbd1df by pass all options to rrweb 2020-10-01 14:17:46 +08:00
Yanzhen Yu
9bdf9692db Release 0.6.1 2020-09-24 10:28:58 +08:00
Yanzhen Yu
325ca4cc69 expose trigger resize method 2020-09-24 10:28:35 +08:00
Yanzhen Yu
9488deb6d5 Release 0.9.7 2020-09-23 19:18:21 +08:00
Yanzhen Yu
c5e8d0bee9 fix queue and use a unsafe but performant checker 2020-09-23 19:15:10 +08:00
Yanzhen Yu
183daf34b0 Release 0.6.0 2020-09-23 16:08:23 +08:00
Yanzhen Yu
4d45d16cb8 update rrweb version 2020-09-23 16:07:24 +08:00
Yanzhen Yu
8065415de6 Release 0.9.6 2020-09-21 14:01:56 +08:00
jackycoder
e63b554b49 fix iframe border issue (#41) 2020-09-20 18:59:44 +08:00
jackycoder
f8e88ced7b compatibility fixes (#358)
* fix polyfill NodeList forEach

* contentDocument.contains for IE

* polyfill DOMTokenList forEach
2020-09-20 18:55:29 +08:00
jackycoder
ef84f844ae fix polyfill NodeList forEach (#357) 2020-09-20 15:25:50 +08:00
Yanzhen Yu
64efb8c242 close #356 improve loop checker 2020-09-20 15:06:30 +08:00
Yanzhen Yu
c9391a9c92 Release 0.9.5 2020-09-20 14:16:29 +08:00
Yanzhen Yu
8d8e70400b make sure rrweb do not use browser API in static stage 2020-09-20 14:15:19 +08:00
Eoghan Murray
6728d12b3c Add a slimDOM option to strip out unnecessary parts of the DOM (#36)
* Add a `slimDOM` option to strip out unnecessary parts of the DOM in terms of replay

 - <script> tags in the <head> take up unnecessary storage space and are often injected semi randomly to become a source of unnecessary variation between recordings of the same thing
 - comment tags can be stripped out without affecting display
 - future: this option could also turn on more aggressive stripping, e.g. elements that are hidden by CSS (assuming we can handle them becoming visible after mutation events)

* Mark nodes ignored due to slimDOM option, so that they can also be ignored by the mutation observer in rrweb

* Introducing the `ignored` attribute violates the `serializedNodeWithId` type

* slimDOM: Strip out whitespace nodes from <head> element as they have no effect but take up space

 - these would otherwise have to be merged after <script> elements are removed; for statcounter usecase, removing
   <script> elements is no good if there is still a trace of their presence due to the white space (and hence a variant <head> node is still produced)
 - I explored a more radical stripping of all white space nodes, but there is a problem if parent node is <pre> or otherwise rendered with `white-space: pre` and similar.
   detecting applied styles with getComputedStyle would be very expensive (I haven't measured it though)

* Export IGNORED_NODE as a constant instead of relying on the hard-to-grok `-2`

* Remove <link rel=preload as=script> which are similarly as useless as <script> tags

* Make slimDOM configurable with the expecations that `slimDOMOptions: true` will only enable non-destructive options (so not all options may be turned on)

* Expand slimDOM to add options to remove more elements from the <head> that should not be necessary in the replayer context
2020-09-20 13:00:44 +08:00
Justin Halsall
65d0d4e54a child nodes without __sn now remove without error (#307) 2020-09-20 12:58:23 +08:00
Yanzhen Yu
9049f2aef1 close #350 catch error may caused by checkout feature 2020-09-20 12:47:43 +08:00
Yanzhen Yu
9a3e1fe724 fix last played timestamp when it is a mousemove event 2020-09-20 12:37:20 +08:00
Yanzhen Yu
2440701926 impl #309 observe font face set changes 2020-09-17 02:11:34 +08:00
Yanzhen Yu
412f6ca95e Release 0.9.4 2020-09-16 22:57:20 +08:00
Yanzhen Yu
a68684d881 clean up __ln property when remove node 2020-09-16 17:28:07 +08:00
Yanzhen Yu
e1b02d1b67 Release 0.5.6 2020-09-12 17:41:26 +08:00
Yanzhen Yu
22e6b67903 close #33 upgrade rrweb 2020-09-12 17:40:27 +08:00
Yanzhen Yu
81c2e547d8 Release 0.9.3 2020-09-12 17:37:47 +08:00
Yanzhen Yu
3abb2981ec close #322 hook select element selectedIndex property 2020-09-12 17:28:29 +08:00
Yanzhen Yu
8519329e90 close #336 add pointer-events: null to mouse tail wrapper 2020-09-12 15:49:41 +08:00
Yanzhen Yu
dbe1c12cc2 update #324, fix typo 2020-09-12 15:49:15 +08:00
Yanzhen Yu
91dc54c7b8 close #342 send SET_SPEED event when setConfig 2020-09-12 15:12:23 +08:00
DiaNiki
29ff1e9ced Add UNSAFE_replayCanvas. (#36) 2020-09-10 08:43:33 +08:00
Yanzhen Yu
5a1d8b30b0 impl apis: play, pause, goto 2020-09-08 15:09:06 +08:00
Yanzhen Yu
4c0cbfaf6a Release 0.5.5 2020-09-07 22:07:37 +08:00
Yanzhen Yu
1f16bd750f upgrade to rrweb 0.9.2 2020-09-07 22:07:17 +08:00
Yanzhen Yu
52e257627d Release 0.9.2 2020-09-07 22:02:27 +08:00
Yanzhen Yu
41690c755c close #330 implement more accurate finish event 2020-09-07 21:59:57 +08:00
Yanzhen Yu
0688bb6353 close #51 add mouse tail feature 2020-09-07 14:52:57 +08:00
Yanzhen Yu
0256bea4bc hide iframe before first meta event 2020-09-07 12:52:09 +08:00
Yanzhen Yu
c8094c33dc Release 0.9.1 2020-09-07 09:47:17 +08:00
Yanzhen Yu
9b8c7f755f close #161 support "addEvent" in any state 2020-09-07 09:44:03 +08:00
Yanzhen Yu
1bc5aaeb01 close #300 upgrade rrweb-snapshot 2020-09-06 21:34:25 +08:00
Yanzhen Yu
fd285ed2c4 Release 0.8.2 2020-09-06 19:15:44 +08:00
Yanzhen Yu
1e4df37093 close #215 catch delete rule errors 2020-09-06 18:47:08 +08:00