JS 错误
本节列出了我们社区报告的最常见的 Javascript 错误。
Require() of ES module
Section titled Require() of ES module此错误(以及下面的错误)通常发生在你尝试在服务端上下文(SSR、Nuxt、Next、Remix 应用等)中导入 tracker 时。
要修复它,需要确保 tracker 是在浏览器上下文中导入并运行的,方法是使用动态导入、客户端组件等。
ReferenceError: Navigator is not defined
Section titled ReferenceError: Navigator is not defined有时当你尝试导入 tracker-assist 或 tracker-fetch 插件时会出现此错误,这是因为 node 试图在环境中没有 window API 的情况下构建页面。
修复方法相当简单。你只需将引发问题的插件的常规导入:
import trackerAssist from '@openreplay/tracker-assist/cjs';
改为在 componendDidMount 或其替代方案 useEffect 内进行动态导入:
import Tracker, { Options } from "@openreplay/tracker";
const tracker = new Tracker({ /* your options */ });
class TrackerComponent extends React.Component {
componentDidMount = () => {
import(‘@openreplay/tracker-assist/cjs’).then(({ default: trackerAssist }) => {
tracker.start(/* your options */)
tracker.use(trackerAssist(/* your assist options */))
})
}
/* Other code */
这样,所有依赖 window API 的插件都将在组件渲染时被导入。
Critical dependency: the request of a dependency is an expression
Section titled Critical dependency: the request of a dependency is an expression这可能发生在旧版本的 tracker-assist 插件上。如果你在编译时遇到下面的错误,应当应用此变通方案:
Failed to compile.
./node_modules/peerjs/dist/peerjs.min.js
Critical dependency: the request of a dependency is an expression
Uncaught DOMException: Blocked a frame with origin “X” from accessing a cross-origin frame
Section titled Uncaught DOMException: Blocked a frame with origin “X” from accessing a cross-origin frameOpenReplay tracker 默认会捕获同域的 iFrame。然而,当它尝试捕获与你网站不同域的 iFrame 时,会抛出错误。你可以选择:
- 使用
captureIFrames属性禁用整个功能,如下例所示:
tracker.configure({
projectKey: PROJECT_KEY,
captureIFrames: false
});
- 继续捕获 iFrame(默认行为),方法是仅为同域的
<iframe>标签添加data-openreplay-captureHTML 属性。这样,跨域 iFrame 就不会被 OpenReplay 跟踪。
My problem is not listed
Section titled My problem is not listed如果你遇到本页面未列出的任何错误,欢迎提交 issue,或者直接联系我们的 Slack,或查看我们的论坛以从我们的社区获得帮助。