【问题标题】:Why is the Matomo tracking code the way it is [closed]为什么 Matomo 跟踪代码是这样的[关闭]
【发布时间】:2021-10-06 15:33:29
【问题描述】:

在网站中包含 Matomo 分析的默认代码如下所示:

<!-- Matomo -->
<script type="text/javascript">
  var _paq = window._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.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
  })();
</script>
<!-- End Matomo Code -->

我想知道为什么这么复杂:

  • matomo.js 需要一个全局变量 window._paq。为什么不直接初始化呢:

    window._paq = [['trackPageView'], ['enableLinkTracking'], ...];

  • 立即调用的函数表达式在做什么?只是为了在全局范围内隐藏 'u'、'd' 等?

  • 通过 DOM 操作插入脚本。在这个块之后放置一个&lt;script src="matomo.js"&gt;&lt;/script&gt;标签不是更简单吗?

使用我正在寻找的信息进行编辑,因为我无法再回答自己了:

作为 René Roth answered,该代码除了显而易见的之外什么都不做 - 它设置或扩展 _paq,并包含其他脚本。完全等价于这个,看起来没有混淆:

<script type="text/javascript">
window._paq = [
    ['trackPageView'],
    ['enableLinkTracking'],
    ['setTrackerUrl', '//matomo.example.com/matomo.php'],
    ['setSiteId', '2'],
]
</script>
<script src="//matomo.example.com/matomo.js" type="text/javascript" async="true"></script>

【问题讨论】:

  • 从外部脚本中隐藏变量绝对是跟踪脚本的目标,因为像 UBlock 这样的 AddBlocker 会寻找这些迹象(以及其他)
  • @MoPaMo 是的,但是默认代码是 very 显眼的并且 uBlock Origin 无论如何都会默认阻止它。我不认为这是绕过广告拦截器的尝试。
  • 1) 考虑如果 sn-p 以不同的$IDSITE 包含多次会发生什么 2) 是 3) 以便脚本异步加载(即使在不支持 async 属性的旧浏览器中也是如此)
  • 我想用新信息回答我自己的问题。有人可以重新打开它吗?

标签: javascript matomo


【解决方案1】:

matomo.js 需要一个全局变量 window._paq。为什么不直接 初始化它:

window._paq = [['trackPageView'], ['enableLinkTracking'], ...];

在某些情况下,_paq 变量可能已经定义,并且包含一些您可能想要或需要的附加选项。在这种情况下,这种初始化方式可以防止覆盖预定义的选项。

立即调用的函数表达式在做什么?只为了 在全局范围内隐藏“u”、“d”等?

最好不要用变量污染全局命名空间,您可能已经在全局范围内有一个名为 ud 的变量。

通过 DOM 操作插入脚本。会不会更简单 只是在这个块之后放置一个标签?

您可以这样做,但是您需要确保在调用脚本之前定义了_paq。这样,所有相关信息都集中在一个地方,并且在运行主 matomo 脚本之前肯定会设置选项。

【讨论】:

  • 谢谢,这正是我的想法。所以没有必要本身代码是这样的。特别是因为它被显示为“将此代码复制到您的原始页面” - 复制 sn-p 的人不太可能已经有 matomo 的代码。
猜你喜欢
  • 2015-03-12
  • 1970-01-01
  • 1970-01-01
  • 2014-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 2018-04-26
相关资源
最近更新 更多