From a2c17d7317c21b00f5a43ed73cb461b794394fb5 Mon Sep 17 00:00:00 2001 From: heyu <1395294694@qq.com> Date: Fri, 19 Aug 2022 11:27:19 +0800 Subject: [PATCH 1/2] fix: Fixed a bug where FPSObserver cannot record Canvas when blockClass is a regular expression --- .../src/record/observers/canvas/canvas-manager.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/rrweb/src/record/observers/canvas/canvas-manager.ts b/packages/rrweb/src/record/observers/canvas/canvas-manager.ts index 30eb46a6de..6c22a5d62c 100644 --- a/packages/rrweb/src/record/observers/canvas/canvas-manager.ts +++ b/packages/rrweb/src/record/observers/canvas/canvas-manager.ts @@ -9,6 +9,7 @@ import type { listenerHandler, CanvasArg, } from '../../../types'; +import { isBlocked } from '../../../utils'; import { CanvasContext } from '../../../types'; import initCanvas2DMutationObserver from './2d'; import initCanvasContextObserver from './canvas'; @@ -137,6 +138,16 @@ export class CanvasManager { let lastSnapshotTime = 0; let rafId: number; + const getCanvas = (): HTMLCanvasElement[] => { + const matchedCanvas: HTMLCanvasElement[] = []; + win.document.querySelectorAll('canvas').forEach(canvas => { + if (!isBlocked(canvas, blockClass, false)) { + matchedCanvas.push(canvas); + } + }) + return matchedCanvas; + }; + const takeCanvasSnapshots = (timestamp: DOMHighResTimeStamp) => { if ( lastSnapshotTime && @@ -147,8 +158,7 @@ export class CanvasManager { } lastSnapshotTime = timestamp; - win.document - .querySelectorAll(`canvas:not(.${blockClass as string} *)`) + getCanvas() // eslint-disable-next-line @typescript-eslint/no-misused-promises .forEach(async (canvas: HTMLCanvasElement) => { const id = this.mirror.getId(canvas); From 9613922cc1f7171aed1eb1346509a23a1ba46589 Mon Sep 17 00:00:00 2001 From: Justin Halsall Date: Fri, 26 Aug 2022 18:22:06 +0200 Subject: [PATCH 2/2] Update packages/rrweb/src/record/observers/canvas/canvas-manager.ts --- packages/rrweb/src/record/observers/canvas/canvas-manager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rrweb/src/record/observers/canvas/canvas-manager.ts b/packages/rrweb/src/record/observers/canvas/canvas-manager.ts index 6c22a5d62c..22b62358ae 100644 --- a/packages/rrweb/src/record/observers/canvas/canvas-manager.ts +++ b/packages/rrweb/src/record/observers/canvas/canvas-manager.ts @@ -141,7 +141,7 @@ export class CanvasManager { const getCanvas = (): HTMLCanvasElement[] => { const matchedCanvas: HTMLCanvasElement[] = []; win.document.querySelectorAll('canvas').forEach(canvas => { - if (!isBlocked(canvas, blockClass, false)) { + if (!isBlocked(canvas, blockClass, true)) { matchedCanvas.push(canvas); } })