【发布时间】: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 操作插入脚本。在这个块之后放置一个
<script src="matomo.js"></script>标签不是更简单吗?
使用我正在寻找的信息进行编辑,因为我无法再回答自己了:
作为 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