Skip to content

Commit

Permalink
feat: Ignore autoplay attribute on video/audio elements (#1152)
Browse files Browse the repository at this point in the history
* feat: Ignore `autoplay` attribute on video/auto elements

This element leads to weird issues when replaying, so it's better to strip this out.

* add changeset

* fix check


fix typo

* Apply formatting changes

---------

Co-authored-by: mydea <mydea@users.noreply.github.com>
  • Loading branch information
mydea and mydea committed Mar 3, 2023
1 parent 5e6c132 commit eac9b18
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 8 deletions.
5 changes: 5 additions & 0 deletions .changeset/old-dryers-hide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'rrweb-snapshot': minor
---

feat: Ignore `autoplay` attribute on video/audio elements
2 changes: 2 additions & 0 deletions packages/rrweb-snapshot/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import snapshot, {
serializeNodeWithId,
transformAttribute,
ignoreAttribute,
visitSnapshot,
cleanupSnapshot,
needMaskingText,
Expand All @@ -24,6 +25,7 @@ export {
addHoverClass,
createCache,
transformAttribute,
ignoreAttribute,
visitSnapshot,
cleanupSnapshot,
needMaskingText,
Expand Down
22 changes: 16 additions & 6 deletions packages/rrweb-snapshot/src/snapshot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,14 @@ export function transformAttribute(
return value;
}

export function ignoreAttribute(
tagName: string,
name: string,
_value: unknown,
): boolean {
return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';
}

export function _isBlockedElement(
element: HTMLElement,
blockClass: string | RegExp,
Expand Down Expand Up @@ -617,12 +625,14 @@ function serializeElementNode(
const len = n.attributes.length;
for (let i = 0; i < len; i++) {
const attr = n.attributes[i];
attributes[attr.name] = transformAttribute(
doc,
tagName,
attr.name,
attr.value,
);
if (!ignoreAttribute(tagName, attr.name, attr.value)) {
attributes[attr.name] = transformAttribute(
doc,
tagName,
attr.name,
attr.value,
);
}
}
// remote css
if (tagName === 'link' && inlineStylesheet) {
Expand Down
2 changes: 1 addition & 1 deletion packages/rrweb-snapshot/test/html/video.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<title>video</title>
</head>
<body>
<video controls>
<video controls autoplay>
<source src=http://techslides.com/demos/sample-videos/small.webm
type=video/webm> <source
src=http://techslides.com/demos/sample-videos/small.ogv type=video/ogg>
Expand Down
3 changes: 2 additions & 1 deletion packages/rrweb/src/record/mutation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import {
serializeNodeWithId,
transformAttribute,
IGNORED_NODE,
ignoreAttribute,
isShadowRoot,
needMaskingText,
maskInputValue,
Expand Down Expand Up @@ -557,7 +558,7 @@ export default class MutationBuffer {
styleObj[pname] = false; // delete
}
}
} else {
} else if (!ignoreAttribute(target.tagName, m.attributeName!, value)) {
// overwrite attribute if the mutations was triggered in same time
item.attributes[m.attributeName!] = transformAttribute(
this.doc,
Expand Down

0 comments on commit eac9b18

Please sign in to comment.