javascript - 使用了 _paq.push() 但在加载 matomo.js 文件之前没有初始化 Matomo 跟踪器

标签 javascript reactjs matomo

当我尝试在 React 组件中初始化时,Matomo 跟踪失败。但如果我在index.html 中初始化它,效果会很好。我想在组件中发生一些事件后初始化 matomo,但收到此错误:

matomo.js:182 _paq.push() was used but Matomo tracker was not initialized before the matomo.js file was loaded. Make sure to configure the tracker via _paq.push before loading matomo.js. Alternatively, you can create a tracker via Matomo.addTracker() manually and then use _paq.push but it may not fully work as tracker methods may not be executed in the correct order.

我想从后端加载 Matomo_url 和 Site_id,然后初始化 matomo 跟踪,代码如下:

var _paq = window._paq || [];
_paq.push(["trackPageView"]);
_paq.push(["enableLinkTracking"]);
(function() {
  var u = "//{$MATOMO_URL}/";
  _paq.push(["setTrackerUrl", u + "matomo.php"]);
  _paq.push(["setSiteId", { $IDSITE }]);
  var d = document,
    g = d.createElement("script"),
    s = d.getElementsByTagName("script")[0];
  g.type = "text/javascript";
  g.async = true;
  g.defer = true;
  g.src = u + "matomo.js";
  s.parentNode.insertBefore(g, s);
})();

初始化 matomo 发生在组件的 componentDidMount 中。我将不胜感激任何想法。

最佳答案

Matomo 跟踪代码需要 _paq 变量作为 matomo.js 的全局变量才能正常工作。如果跟踪代码放在函数内,则 _paq 仅存在于该函数内。

要解决此问题,您可以在 var _paq = window._paq || 下面添加 window._paq=_paq [];行。

关于javascript - 使用了 _paq.push() 但在加载 matomo.js 文件之前没有初始化 Matomo 跟踪器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62758236/

相关文章:

reactjs - 如何在 Chrome 扩展程序中启用“使用 Google 登录”?

javascript - 单击 Material UI <Button/> 更改波纹颜色

go - 使用 golang 设置 piwik

javascript - 在 IE9 中将 SVG 节点导入到另一个文档中

javascript - 是否可以根据条件对齐 div?

docker - 在子路径上带有nginx的piwik docker镜像

php - 使用 php 安装 Piwik

javascript - Sequelize findOne include 给出空数组

javascript - 将 konva js Canvas 转换为图像并将这些图像加载到另一个 Canvas

javascript - 如何用 PixiJS 渲染 SVG?