在网站中包含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'], ...];
<script src="matomo.js"></script>
标签不是更简单吗?编辑我想要的信息,因为我再也不能回答自己了:
作为勒内罗斯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>
发布于 2021-07-31 12:25:44
matomo.js期望有一个全局变量window._paq。为什么不直接初始化它:
window._paq = ['trackPageView','enableLinkTracking',.];
可能有一些实例已经定义了_paq
变量,并包含了一些您可能想要或需要的其他选项。在这种情况下,这种初始化方式可以防止重写预定义的选项.
立即调用的函数表达式在做什么?只是为了把“u”、“d”等隐藏在全球范围之外?
最好的做法是不要用变量污染全局名称空间,您可能已经在全局范围中有一个名为u
或d
的变量。
脚本是通过DOM操作插入的。在这个街区后面放个标签不是更简单吗?
您可以这样做,但是在调用脚本之前,您需要确保定义了_paq
。这样,所有相关信息都在一个地方,并且在运行主matomo脚本之前一定会设置选项。
https://stackoverflow.com/questions/68601961
复制相似问题