turn some warning message into debug message
This commit is contained in:
1
guide.md
1
guide.md
@@ -215,6 +215,7 @@ The replayer accepts options as its constructor's second parameter, and it has t
|
|||||||
| loadTimeout | 0 | timeout of loading remote style sheet |
|
| loadTimeout | 0 | timeout of loading remote style sheet |
|
||||||
| skipInactive | false | whether to skip inactive time |
|
| skipInactive | false | whether to skip inactive time |
|
||||||
| showWarning | true | whether to print warning messages during replay |
|
| showWarning | true | whether to print warning messages during replay |
|
||||||
|
| showDebug | false | whether to print debug messages during replay |
|
||||||
|
|
||||||
#### Use rrweb-player
|
#### Use rrweb-player
|
||||||
|
|
||||||
|
|||||||
@@ -130,13 +130,14 @@ replayer.play();
|
|||||||
|
|
||||||
可以通过 `new rrweb.Replayer(events, options)` 的方式向 rrweb 传递回放时的配置参数,具体配置如下:
|
可以通过 `new rrweb.Replayer(events, options)` 的方式向 rrweb 传递回放时的配置参数,具体配置如下:
|
||||||
|
|
||||||
| key | 默认值 | 功能 |
|
| key | 默认值 | 功能 |
|
||||||
| ------------ | ------------- | ---------------------------- |
|
| ------------ | ------------- | ------------------------------- |
|
||||||
| speed | 1 | 回放倍速 |
|
| speed | 1 | 回放倍速 |
|
||||||
| root | document.body | 回放时使用的 HTML 元素 |
|
| root | document.body | 回放时使用的 HTML 元素 |
|
||||||
| loadTimeout | 0 | 加载异步样式表的超时时长 |
|
| loadTimeout | 0 | 加载异步样式表的超时时长 |
|
||||||
| skipInactive | false | 是否快速跳过无用户操作的阶段 |
|
| skipInactive | false | 是否快速跳过无用户操作的阶段 |
|
||||||
| showWarning | true | 是否在回放过程中打印警告信息 |
|
| showWarning | true | 是否在回放过程中打印警告信息 |
|
||||||
|
| showDebug | false | 是否在回放过程中打印 debug 信息 |
|
||||||
|
|
||||||
#### 使用 rrweb-player
|
#### 使用 rrweb-player
|
||||||
|
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ export class Replayer {
|
|||||||
loadTimeout: 0,
|
loadTimeout: 0,
|
||||||
skipInactive: false,
|
skipInactive: false,
|
||||||
showWarning: true,
|
showWarning: true,
|
||||||
|
showDebug: false,
|
||||||
};
|
};
|
||||||
this.config = Object.assign({}, defaultConfig, config);
|
this.config = Object.assign({}, defaultConfig, config);
|
||||||
|
|
||||||
@@ -445,7 +446,7 @@ export class Replayer {
|
|||||||
const event = new Event(MouseInteractions[d.type].toLowerCase());
|
const event = new Event(MouseInteractions[d.type].toLowerCase());
|
||||||
const target = mirror.getNode(d.id);
|
const target = mirror.getNode(d.id);
|
||||||
if (!target) {
|
if (!target) {
|
||||||
return this.warnNodeNotFound(d, d.id);
|
return this.debugNodeNotFound(d, d.id);
|
||||||
}
|
}
|
||||||
switch (d.type) {
|
switch (d.type) {
|
||||||
case MouseInteractions.Blur:
|
case MouseInteractions.Blur:
|
||||||
@@ -490,7 +491,7 @@ export class Replayer {
|
|||||||
}
|
}
|
||||||
const target = mirror.getNode(d.id);
|
const target = mirror.getNode(d.id);
|
||||||
if (!target) {
|
if (!target) {
|
||||||
return this.warnNodeNotFound(d, d.id);
|
return this.debugNodeNotFound(d, d.id);
|
||||||
}
|
}
|
||||||
if ((target as Node) === this.iframe.contentDocument) {
|
if ((target as Node) === this.iframe.contentDocument) {
|
||||||
this.iframe.contentWindow!.scrollTo({
|
this.iframe.contentWindow!.scrollTo({
|
||||||
@@ -529,7 +530,7 @@ export class Replayer {
|
|||||||
}
|
}
|
||||||
const target = mirror.getNode(d.id);
|
const target = mirror.getNode(d.id);
|
||||||
if (!target) {
|
if (!target) {
|
||||||
return this.warnNodeNotFound(d, d.id);
|
return this.debugNodeNotFound(d, d.id);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
((target as Node) as HTMLInputElement).checked = d.isChecked;
|
((target as Node) as HTMLInputElement).checked = d.isChecked;
|
||||||
@@ -577,7 +578,7 @@ export class Replayer {
|
|||||||
this.mouse.style.top = `${y}px`;
|
this.mouse.style.top = `${y}px`;
|
||||||
const target = mirror.getNode(id);
|
const target = mirror.getNode(id);
|
||||||
if (!target) {
|
if (!target) {
|
||||||
return this.warnNodeNotFound(d, id);
|
return this.debugNodeNotFound(d, id);
|
||||||
}
|
}
|
||||||
this.hoverElements((target as Node) as Element);
|
this.hoverElements((target as Node) as Element);
|
||||||
}
|
}
|
||||||
@@ -621,4 +622,18 @@ export class Replayer {
|
|||||||
}
|
}
|
||||||
console.warn(REPLAY_CONSOLE_PREFIX, `Node with id '${id}' not found in`, d);
|
console.warn(REPLAY_CONSOLE_PREFIX, `Node with id '${id}' not found in`, d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private debugNodeNotFound(d: incrementalData, id: number) {
|
||||||
|
/**
|
||||||
|
* There may me some valid scenes of node not being found.
|
||||||
|
* Because DOM events are macrotask and MutationObserver callback
|
||||||
|
* is microtask, so events fired on a removed DOM may emit
|
||||||
|
* snapshots in the reverse order.
|
||||||
|
*/
|
||||||
|
if (!this.config.showDebug) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// tslint:disable-next-line: no-console
|
||||||
|
console.log(REPLAY_CONSOLE_PREFIX, `Node with id '${id}' not found in`, d);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -231,6 +231,7 @@ export type playerConfig = {
|
|||||||
loadTimeout: number;
|
loadTimeout: number;
|
||||||
skipInactive: Boolean;
|
skipInactive: Boolean;
|
||||||
showWarning: Boolean;
|
showWarning: Boolean;
|
||||||
|
showDebug: Boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type playerMetaData = {
|
export type playerMetaData = {
|
||||||
|
|||||||
Reference in New Issue
Block a user