Commit Graph

118 Commits

Author SHA1 Message Date
Yanzhen Yu
f57bb1041b remove useless console.log 2026-04-01 12:00:00 +08:00
Yanzhen Yu
67ef897454 tolerate insertRule error since browser may throw Error on wrong prefix 2026-04-01 12:00:00 +08:00
Yanzhen Yu
c68d3e1803 avoid style sheet rules index overflow 2026-04-01 12:00:00 +08:00
Yanzhen Yu
bd5aa59589 ignore style sheet changes before the target DOM was serialized
The serialized DOM will contains all the styles, so this looks safe.
2026-04-01 12:00:00 +08:00
Filip Slatinac
a242a105d3 Checking node existence (#174)
* added our package

* reverted back to old rrweb snapshot

* Array.from does not capture all elements added in the set, we have to manually iterate through the iterator

* package lock

* checking if nodes are in the parent before we try inserting them
2026-04-01 12:00:00 +08:00
Eoghan Murray
23220f1771 Was experiencing case when a TouchEnd event occurred on a text element i.e. (nodeType: 3 / nodeName: #text) (#180)
This was a recording taken with rrweb 0.7.27 (3afff63970) and rrweb-snapshot 0.7.21 (a0dc9481b2) so issue may have been fixed in the intervening commits
2026-04-01 12:00:00 +08:00
Yanzhen Yu
329c790194 add trigger focus option to replayer, which may helps integration into other apps 2026-04-01 12:00:00 +08:00
David Cramer
704f6d4a4f Add support for replaying StyleSheetRule events (#178) 2026-04-01 12:00:00 +08:00
David Cramer
3a0e829884 Add observers for stylesheet mutations (#177)
* hack together stylesheet observer

* Add test coverage for insertRule/deleteRule on stylesheets

* Add new observers

* update patch based on changes to master

* Functioning event recording

* Remove print statements

* Fix ID usage and mark add vs remove

* Correct type

Co-authored-by: Jon Perl <perl.jonathan@gmail.com>
2026-04-01 12:00:00 +08:00
Yanzhen Yu
5bfc2c704a impl media interactions recording
close #159
close #72
listen to HTMLMediaElement's play/pause events, and replay them
by programmatically play and pause the target element.
2026-04-01 12:00:00 +08:00
Yanzhen Yu
d0c31bb4cf close #153 emit event when it being casted 2026-04-01 12:00:00 +08:00
Yanzhen Yu
33e69c5af9 close #143 tweak the code of iterating iterators
Originally we use Array.from to transform iterator into array.
But we found some framework may overwrite the Array.from with a
pollyfill which was not implement correctly.
2026-04-01 12:00:00 +08:00
Filip Slatinac
39eacdece9 Changing Array.from to iterators. (#145)
* added our package

* reverted back to old rrweb snapshot

* Array.from does not capture all elements added in the set, we have to manually iterate through the iterator

* package lock
2026-04-01 12:00:00 +08:00
mpstv
84de337040 Try add configurable threshold for events throttling (#147) 2026-04-01 12:00:00 +08:00
Yanzhen Yu
cd12816638 close #140 transform mutated attributes 2026-04-01 12:00:00 +08:00
yz-yu
1afc0b7527 add hooks API (#132) 2026-04-01 12:00:00 +08:00
Yanzhen Yu
2ac8634607 re-add addCustomEvent function via function property 2026-04-01 12:00:00 +08:00
Yanzhen Yu
f872ed143b Revert "temp revert #81"
This reverts commit 835161c737.
2026-04-01 12:00:00 +08:00
Yanzhen Yu
2be090cc0d temp revert #81
This patch introduce a breaking change in rrweb-record's API, so
we will revert it in 0.7.x and release it in 0.8.
2026-04-01 12:00:00 +08:00
Yanzhen Yu
21e90a0c7d hotfix throttle function args 2026-04-01 12:00:00 +08:00
dphuang2
d722554a07 Fix timeOffset on multiple stylesheet loads (#115)
In the case that the replayer triggers multiple FullSnapshot events, it
will call waitForStylesheetLoad multiple times. When the replayer
resumes, it could already have a timeoffset set from a previous
resume in a previous waitForStylesheetLoad call. In this case our new
timeoffset should be the value of our current time in the replay
(timer.timeOffset + getTimeOffset()). To solve this, I created a public
getCurrentTime function which correctly returns the time in the replay
and used that as our new timeoffset when resuming from a stylesheet
load.
2026-04-01 12:00:00 +08:00
Yanzhen Yu
be1d90ab1d fix#110 add NodeList forEach polyfill 2026-04-01 12:00:00 +08:00
Yanzhen Yu
3a5e9271d5 close #84 set mousemoveData's source by event source 2026-04-01 12:00:00 +08:00
shenchenxh
027750959a fix 100 (#102) 2026-04-01 12:00:00 +08:00
Yanzhen Yu
d92a946926 impl #81 custom event
This is the record side impl of custom event, according to the
issue, we may also add first-class support for the custom event
tag like display color labels in the replayer-ui.
2026-04-01 12:00:00 +08:00
dphuang2
469dbd5dee added 'pointer-events: none' for Replayer iframe (#96)
'pointer-events: none' prevents the user from interacting with the DOM
inside of the iframe. This prevents accidental tampering by a user when
watching replays such as link clicks or DOM manipulation.

pointer-events supported by 97.15% usage: https://caniuse.com/#feat=pointer-events
2026-04-01 12:00:00 +08:00
肉肉肉肉
338da11e35 new feature: add custom style in replayer (#87)
* new feature: add custom style in replayer

* concat style rules for loop
2026-04-01 12:00:00 +08:00
Yanzhen Yu
94ca07d45d fix#71 fix touch event listener and throttle touch move callback 2026-04-01 12:00:00 +08:00
Yanzhen Yu
891b678557 pass mask input option to snapshot 2026-04-01 12:00:00 +08:00
Yanzhen Yu
5c3619b795 tweak some code for mask input option 2026-04-01 12:00:00 +08:00
Sebastian Jakob
2502913883 Option to mask inputs (#80)
* Option to mask inputs

Added option 'maskAllInputs' to replace all user inputs with an Asterisk.

* Update types.d.ts
2026-04-01 12:00:00 +08:00
Yanzhen Yu
57df28de2f remove mitt typings namesapce 2026-04-01 12:00:00 +08:00
Yanzhen Yu
eaf339ed79 Upgrade the DOM mutation observer
This is an important patch contains some crtical bug fixes for
the DOM mutation observer.
Previously the observer did not handle complex DOM movement very
well. So in this patch we optimized this by distinguishing moved
node better and added a resolving queue to avoid the error caused
by ordering.
2026-04-01 12:00:00 +08:00
Marcos Passos
79981a6a44 Export useful enums (#77)
Fixes #74
2026-04-01 12:00:00 +08:00
Yanzhen Yu
7d4b2ad3e0 emit mouse interaction event during replay 2026-04-01 12:00:00 +08:00
yz-yu
689840d237 start to support live mode (#73)
1. add a liveMode flag to config, when liveMode is set, the timer
will keep running even though all the actions casted
2. add a public method addEvent, which will cast newly added event
in sync
3. move mouse in sync mode with the latest position info
2026-04-01 12:00:00 +08:00
Yanzhen Yu
f312ecbadc add the inline stylesheet option when recording 2026-04-01 12:00:00 +08:00
Yanzhen Yu
503987c583 fix #62 accept RegExp type block class config 2026-04-01 12:00:00 +08:00
Yanzhen Yu
4f58cad48d resume with time offset when after wait stylesheet load 2026-04-01 12:00:00 +08:00
Yanzhen Yu
32c33f3ce8 move browser related APIs into runtime 2026-04-01 12:00:00 +08:00
Yanzhen Yu
d1b32e6e9d impl #23 add custom privacy selectors 2026-04-01 12:00:00 +08:00
Yanzhen Yu
da54061b53 check attribute is null instead of any falsy value 2026-04-01 12:00:00 +08:00
Yanzhen Yu
931f71e738 update mutation observer handler
1. deep delete from adds set when node was dropped
2. remove node from dropped set when node was added again
2026-04-01 12:00:00 +08:00
Yanzhen Yu
12fc5de3a7 check whether the removed node's ancestors has been removed 2026-04-01 12:00:00 +08:00
Yanzhen Yu
153035f4b0 turn some warning message into debug message 2026-04-01 12:00:00 +08:00
yz-yu
4a2c733583 improve mouse record and replay (#49)
Increase the throttle value of collecting mouse move and add a
transition time to the replayer's mouse. This may decrease the
size of mouse move data and make the replay movement more smooth.
Another change is to move and hover when click event is replayed.
This is to improve the replay of some programmatic click, such as
E2E tests.
2026-04-01 12:00:00 +08:00
Yanzhen Yu
e2bc867b2e move all events to an enum and update guide 2026-04-01 12:00:00 +08:00
Yanzhen Yu
34571ad708 resolve #47 update dependency 2026-04-01 12:00:00 +08:00
Yanzhen Yu
384227d0df resolve #48 check focus and blur before call since the target can be HTMLDocument in firefox 2026-04-01 12:00:00 +08:00
yz-yu
ca61d6b19e fix remove node observer and check on the result of getNode (#43)
* check removed node and its parent before collect

* add more more checks on the result of getNode
2026-04-01 12:00:00 +08:00