首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Matomo追踪码是这样的?

为什么Matomo追踪码是这样的?
EN

Stack Overflow用户
提问于 2021-07-31 12:09:48
回答 1查看 323关注 0票数 3

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

代码语言:javascript
运行
复制
<!-- 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操作插入的。在这个块后面放置一个<script src="matomo.js"></script>标签不是更简单吗?

编辑我想要的信息,因为我再也不能回答自己了:

作为勒内罗斯answered,代码只做了显而易见的事情--它设置或扩展了_paq,并包含了其他脚本。它完全等同于这一点,它看上去并没有混淆:

代码语言:javascript
运行
复制
<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>
EN

回答 1

Stack Overflow用户

发布于 2021-07-31 12:25:44

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

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

可能有一些实例已经定义了_paq变量,并包含了一些您可能想要或需要的其他选项。在这种情况下,这种初始化方式可以防止重写预定义的选项.

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

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

脚本是通过DOM操作插入的。在这个街区后面放个标签不是更简单吗?

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68601961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档