fix#110 add NodeList forEach polyfill

This commit is contained in:
Yanzhen Yu
2026-04-01 12:00:00 +08:00
parent 530f5baa3a
commit be1d90ab1d
3 changed files with 22 additions and 4 deletions

View File

@@ -1,6 +1,12 @@
import { snapshot } from 'rrweb-snapshot';
import initObservers from './observer';
import { mirror, on, getWindowWidth, getWindowHeight } from '../utils';
import {
mirror,
on,
getWindowWidth,
getWindowHeight,
polyfill,
} from '../utils';
import {
EventType,
event,
@@ -49,6 +55,8 @@ function record(options: recordOptions = {}): listenerHandler | undefined {
throw new Error('emit function is required');
}
polyfill();
let lastFullSnapshotEvent: eventWithTime;
let incrementalSnapshotCount = 0;
wrappedEmit = (e: eventWithTime, isCheckout?: boolean) => {

View File

@@ -21,8 +21,8 @@ import {
Handler,
Emitter,
} from '../types';
import { mirror } from '../utils';
import getInjectStyleRules from './styles/inject-style';
import { mirror, polyfill } from '../utils';
import getInjectStyleRules from './styles/inject-style';
import './styles/style.css';
const SKIP_TIME_THRESHOLD = 10 * 1000;
@@ -78,6 +78,7 @@ export class Replayer {
this.timer = new Timer(this.config);
smoothscroll.polyfill();
polyfill();
this.setupDom();
this.emitter.on('resize', this.handleResize as Handler);
}
@@ -288,7 +289,9 @@ export class Replayer {
const styleEl = document.createElement('style');
const { documentElement, head } = this.iframe.contentDocument!;
documentElement!.insertBefore(styleEl, head);
const injectStylesRules = getInjectStyleRules(this.config.blockClass).concat(this.config.insertStyleRules);
const injectStylesRules = getInjectStyleRules(
this.config.blockClass,
).concat(this.config.insertStyleRules);
for (let idx = 0; idx < injectStylesRules.length; idx++) {
(styleEl.sheet! as CSSStyleSheet).insertRule(injectStylesRules[idx], idx);
}

View File

@@ -163,3 +163,10 @@ export function isTouchEvent(
): event is TouchEvent {
return Boolean((event as TouchEvent).changedTouches);
}
export function polyfill() {
if ('NodeList' in window && !NodeList.prototype.forEach) {
NodeList.prototype.forEach = (Array.prototype
.forEach as unknown) as NodeList['forEach'];
}
}