【问题标题】:_paq.push() was used but Matomo tracker was not initialized before the matomo.js file was loaded_paq.push() 被使用,但 Matomo 跟踪器在 matomo.js 文件加载之前没有初始化
【发布时间】:2025-12-03 03:25:03
【问题描述】:

当我尝试在 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 中。我会很感激任何想法。

【问题讨论】:

  • _paq 需要是一个全局变量。所以如果你在一个函数中定义它,你需要在那个函数中设置window._paq=_paq使其成为全局的。
  • @lw1.at 感谢您的评论。我又忘了看 *。但你是对的,我通过执行window._paq=_paq_paq 附加到窗口,然后效果很好

标签: javascript reactjs matomo


【解决方案1】:

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

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

【讨论】: