Commit Graph

241 Commits

Author SHA1 Message Date
Lucky Feng
e9b9d42e6e fix: #542 wrong results of splitting log stacks (#547)
fix bug of stack parcer and increase compatibility for different browser vendors
2021-05-04 13:11:20 +08:00
Lucky Feng
7e46341c18 fix: issue #548 (#550)
1. Do not use virtual parent optimization if the mutation targets have iframe elements as children. This will cause some performance regression but will be easy to add and ship.
2. If an iframe element has already been a child of a virtual parent, add the virtual parent back to the dom.
2021-05-02 21:56:43 +08:00
Yanzhen Yu
2b96a68e88 check events cursor before comparing timestamp 2021-04-23 18:49:27 +08:00
re-fort
18ad3dae1a Add options to mask texts (#540)
* feat: add options to mask texts

* feat: add the default mask function

* refactor: rename options to identify the difference between  mask text and mask input

* test: add tests about masking

* doc: add options about masking

* chore: bump up rrweb-snapshot version
2021-04-22 16:03:52 +08:00
Yanzhen Yu
df455c483a fix #535 add play-back event to reset mirror and replayer 2021-04-18 21:31:29 +08:00
Yanzhen Yu
cf860278a2 call sort after unpack 2021-04-18 21:10:29 +08:00
Eoghan Murray
af0c0d95bd Sort events upon creation, and keep ordered (#411)
* Sort events at start, as otherwise we risk misidentifying the last event

* Keep inserted events in the correct order, ensuring we don't misidentify the last event

 - e.g. network conditions mean that 'live' events come in non-sequentially
 - or so that adding custom events to an existing event works

* Ensure we maintain original ordering while inserting a new event which has an identical timestamp to an existing event. This came up with a series of mutations which had the same timestamp but needed to be applied in the correct order

* Fast track the common case of a new event being added which occurs after all prior events
2021-04-18 14:21:47 +08:00
Eoghan Murray
7c5e15d607 Don't perform newly added actions if player is paused (#539) 2021-04-18 14:15:57 +08:00
Yanzhen Yu
fbfb96297d fix first play check 2021-04-17 16:34:06 +08:00
Yanzhen Yu
693a8faf5e impl #530, observe drag event and replay as mousemove 2021-04-11 12:18:14 +08:00
John Pham
e8925337d9 Don't rebuildFullSnapshot if it's the first run (#532)
* Don't rebuildFullSnapshot if it's the first run

* Fix typo
2021-04-09 13:23:36 +08:00
Yanzhen Yu
80e0efa1da fix #531 use getRootNode with precheck 2021-04-07 12:10:47 +08:00
Yanzhen Yu
df7537b01d impl shadow DOM manager
part of #38
1. observe DOM mutations in shadow DOM
2. rebuild DOM mutations in shadow DOM
2021-03-28 18:16:54 +08:00
Lucky Feng
e3f9a4d205 fix: inaccurate mouse position (#522)
1. Position of mouse was inaccurate when replaying and this PR will fix it.
2. Fix the bug that if one nested iframe has a scale transform and the position of mouse was inaccurate as well.
2021-03-25 10:29:49 +08:00
Lucky Feng
2260806ff3 fix: errors of replaying iframe records (#520)
* fix: errors of replaying iframe records

error1:
HierarchyRequestError: Failed to execute 'appendChild' on 'Node': Nodes of type '#document' may not be inserted inside nodes of type '#document-fragment'.
code: parent.appendChild(target)

error2:
Uncaught DOMException: Failed to execute 'appendChild' on 'Node': Only one element on document allowed.
code: parent.appendChild(target);

* improve the comment for bugfix
2021-03-19 11:48:12 +08:00
Yakko Majuri
fe6341eefc Handle event undefined in initMoveObserver (#515) 2021-03-09 21:25:55 +08:00
Yanzhen Yu
f3e118ef39 add an experiment config to set max speed in fast forward 2021-03-08 14:11:56 +08:00
Yanzhen Yu
2e723a2010 impl #507 export takeFullSnapshot as a public API 2021-03-08 13:30:54 +08:00
Yanzhen Yu
34651c40fe fix lint errors 2021-02-27 18:21:54 +08:00
Yanzhen Yu
2c6be72f35 close #491 check whether link node is head 2021-02-27 13:46:29 +08:00
Yanzhen Yu
860ff38e90 close #501 do not count attach iframe event in checkout 2021-02-27 13:32:21 +08:00
Province Innovation
75e4a0c1ff Added mousemoveCallback threshold option to sampling config. (#492)
* Added mousemoveCallback threshold option to sampling config.

* Added mousemoveCallback to definitions file.
2021-02-19 11:56:12 +08:00
Yanzhen Yu
2a3f40669b start impl rrdom 2021-02-13 21:52:06 +08:00
Eoghan Murray
28fd169a5a remove debugging warning (#486)
I can't see a reason for the warning here so believe it's a debugging statement that crept in?
2021-02-12 21:56:19 +08:00
yz-yu
f3d7fa3451 Impl record iframe (#481)
* Impl record iframe

* iframe observe

* temp: add bundle file to git

* update bundle

* update with pick

* update bundle

* fix fragment map remove

* feat: add an option to determine whether to pause CSS animation when playback is paused (#428)

set pauseAnimation to true by default

* fix: elements would lose some states like scroll position because of "virtual parent" optimization (#427)

* fix: elements would lose some state like scroll position because of "virtual parent" optimization

* refactor: the bugfix code

bug: elements would lose some state like scroll position because of "virtual parent" optimization

* fix: an error occured at applyMutation(remove nodes part)

error message:
Uncaught (in promise) DOMException: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node

* pick fixes

* revert ignore file

* re-impl iframe record

* re-impl iframe replay

* code housekeeping

* move multi layer dimension calculation to replay side

* update test cases

* teardown test server

* upgrade rrweb-snapshot with iframe load timeout

Co-authored-by: Lucky Feng <yun.feng@smartx.com>
2021-02-10 21:44:25 +08:00
Karl-Aksel Puulmann
5021c7a606 Fix RangeError: Maximum call stack size exceeded (#479)
Saw this line cause issues in production, causing the following error:

```
RangeError Maximum call stack size exceeded
```

I believe this is caused by javascript engine max argument length - see note from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply#using_apply_and_built-in_functions

> The consequences of applying a function with too many arguments (that is, more than tens of thousands of arguments) varies across engines. (The JavaScriptCore engine has hard-coded argument limit of 65536.
2021-02-08 21:37:35 +08:00
Yanzhen Yu
34c74445ba read __rrMutationObserver from window 2021-02-04 15:00:14 +08:00
Eoghan Murray
9187bec814 Discovered that the common case of mouse movement or scrolling happening during takeFullSnapshot was causing mutations to be immediately emitted, contrary to the goal of https://github.com/rrweb-io/rrweb/pull/385 (#470) 2021-01-31 21:43:36 +08:00
Yanzhen Yu
13f1a61743 fix #469 try to get original MutationObserver
We found Angular's zone module will patch MutationObserver which
make the browser hang in some scenarios.
Reference: angular/angular#26948
2021-01-22 12:50:54 +08:00
Yanzhen Yu
ea1a9da6a5 fix #460 ignore added node that are not in document anymore 2021-01-16 22:31:57 +08:00
Yanzhen Yu
7c1ec50d6f clean addList when meet a corner case 2021-01-14 22:50:56 +08:00
Yanzhen Yu
c712fc77a6 let mouse tail duration respect timer speed 2021-01-12 13:36:03 +08:00
Yanzhen Yu
e7fdfcb3ac fix #452 check isBlocked on add mutation's target 2021-01-08 14:03:44 +08:00
Eoghan Murray
ed19afe808 Protect against generation of no-change viewport resize events. (#454)
I noticed 8 or 10 of these events being generated in a multi-tab browsing session on Chrome 87.0 on Win10.  I'm speculating they were generated as a side effect of changing tabs but I can't recreate
2021-01-05 10:22:38 +08:00
Jarosław Salwa
c4d01e31da Scroll replayer iframe on firstFullsnapshot (#451) 2020-12-30 22:31:29 +08:00
101arrowz
e946b69d3f Update to fflate (#448)
* Update to fflate

* Update docs, bundler config
2020-12-22 20:40:37 +08:00
Lucky Feng
f0f32a097a fix: sometimes currentTime is smaller than the totalTime when player is finished (#445)
plus: fix the problem that sometimes return value of getCurrentTime() is negative
2020-12-18 15:32:11 +08:00
Krzysztof Grziwok
714a4fbb73 Catch Security Errors in styleSheet rules (#437) 2020-12-10 22:02:42 +08:00
Lucky Feng
4e7146e72b feat: enable rrweb to record and replay log messages in console (#424)
* wip: working on rrweb logger

* wip: can record and replay some simple log

* wip: can record and replay log's stack

* wip: try to serialize object

* wip: record and replay console logger

hijack all of the console functions.
add listener to thrown errors

* wip: record and replay console logger
add limit to the max number of log records

* feat: enable rrweb to record and replay log messages in console

this is the implementation of new feature request(issue #234)

here are a few points of description.
1. users need to set recordLog option in rrweb.record's parameter to record log messages.  The log recorder is off by default.
2. support recording and replaying all kinds of console functions. But the reliability of them should be tested more
3. the stringify function in  stringify.ts needs improvement. e.g. robustness, handler for cyclical structures and better support for more kinds of object
4. we can replay the log messages in a simulated html console like LogRocket by implementing the interface "ReplayLogger" in the future

* improve: the stringify function

1. handle cyclical structures
2. add stringify option to limit the length of result
3. handle function type

* refactor: simplify the type definition of ReplayLogger
2020-11-29 18:12:03 +08:00
Yanzhen Yu
23a1883dfc pick #286 allow short cut for slim DOM options 2020-11-29 14:54:05 +08:00
Yanzhen Yu
5a6acbd5f0 fix type error of slim DOM options 2020-11-29 14:26:39 +08:00
Yanzhen Yu
3d5f2e2719 pick #286, export slim DOM options 2020-11-29 14:19:25 +08:00
Yanzhen Yu
a42b6419c3 expose blockSelector as a public option 2020-11-29 13:59:25 +08:00
Yanzhen Yu
7d817be155 upgrade to rrweb-snapshot v1.0 2020-11-29 13:54:37 +08:00
Lucky Feng
f9d8fb7844 style: delete a useless constant 2020-11-27 17:52:56 +08:00
Lucky Feng
96e4bfdddd fix: elements would lose some states like scroll position because of "virtual parent" optimization (#427)
* fix: elements would lose some state like scroll position because of "virtual parent" optimization

* refactor: the bugfix code

bug: elements would lose some state like scroll position because of "virtual parent" optimization

* fix: an error occured at applyMutation(remove nodes part)

error message:
Uncaught (in promise) DOMException: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node
2020-11-27 17:46:52 +08:00
Lucky Feng
658999c6e0 feat: add an option to determine whether to pause CSS animation when playback is paused (#428)
set pauseAnimation to true by default
2020-11-27 16:16:18 +08:00
Lucky Feng
8f3086c18c fix: applyScroll function doesn't work in sync mode(play at a specific time) (#426)
applyScroll function should be called after all of new nodes mounted on dom
2020-11-26 13:40:57 +08:00
Eoghan Murray
facd6cc121 Ensure animations don't continue playing when we've paused playback (#417) 2020-11-25 23:20:04 +08:00
Yaozu Lv
a2cd3e2da0 Add record option maskInputFn for custom mask input function (#409) 2020-11-15 16:39:17 +08:00