首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matomo不适用于Rails和webpacker

Matomo不适用于Rails和webpacker
EN

Stack Overflow用户
提问于 2020-03-08 14:37:57
回答 1查看 99关注 0票数 1

Matomo已经停止跟踪我的一个Rails站点的页面访问,我最近升级到使用Webpacker。

当我在私有站点上实验性地创建一个文件test.html,并将跟踪代码从我的生产Rails站点复制/粘贴到其中时,跟踪也不起作用:

代码语言:javascript
复制
!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/packs/",n(n.s=33)}({33:function(e,t){var n,r=window._paq||[];r.push(["setCookieDomain","*.MY_RAILS_SITE"]),r.push(["setDomains",["*.MY_RAILS_SITE","*.MY_RAILS_SITE"]]),r.push(["disableCookies"]),r.push(["trackPageView"]),r.push(["enableLinkTracking"]),function(){var e="https://matomo.MY_MATOMO_HOST/";r.push(["setTrackerUrl",e+"matomo.php"]),r.push(["setSiteId","2"]);var t=document,n=t.createElement("script"),o=t.getElementsByTagName("script")[0];n.type="text/javascript",n.async=!0,n.defer=!0,n.src=e+"matomo.js",o.parentNode.insertBefore(n,o)}(),n=null,addEventListener("turbolinks:load",(function(e){n&&(r.push(["setReferrerUrl",n]),r.push(["setCustomUrl",window.location.href]),r.push(["setDocumentTitle",document.title]),e.data&&e.data.timing&&r.push(["setGenerationTimeMs",e.data.timing.visitEnd-e.data.timing.visitStart]),r.push(["trackPageView"])),n=window.location.href}))}});

但是,当我直接从我的源代码(而不是从生产站点)获取脚本并将其放入test.html文件中时,跟踪工作就可以了!

代码语言:javascript
复制
<html>
<head></head>
<body>
  <p>Hello</p>
  <!-- Matomo -->
    <script>
    var _paq = window._paq || [];
    /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
    _paq.push(["setCookieDomain", "*.MY_RAILS_SITE"]);
    _paq.push(["setDomains", ["*.MY_RAILS_SITE","*.MY_RAILS_SITE"]]);
    _paq.push(["disableCookies"]);
    _paq.push(['trackPageView']);
    _paq.push(['enableLinkTracking']);
    (function() {
      var u="https://matomo.MY_MATOMO_HOST/";
      _paq.push(['setTrackerUrl', u+'matomo.php']);
      _paq.push(['setSiteId', '2']);
      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);
    })();
    <!-- End Matomo Code -->
  </script>
</body>
</html>

(出于隐私考虑,主机名称已编辑。)

显然,在部署到生产环境中时,代码会发生更改,导致代码无法正常工作。

浏览器控制台中没有任何错误,内容安全标头等也没有问题,并且matomo.js脚本正确加载,并显示HTTP200结果。

这里发生了什么事?

EN

回答 1

Stack Overflow用户

发布于 2021-02-16 05:16:15

看起来我终于让它再次工作了。仔细看看Matomo为新网站推荐的JavaScript代码片段。我发现了一些细微的区别。

代码语言:javascript
复制
- var _paq = window._paq || [];
+ var _paq = window._paq = window._paq || [];
  /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
  _paq.push(["setCookieDomain", "*.MY_RAILS_SITE"]);
  _paq.push(["setDomains", ["*.MY_RAILS_SITE","*.MY_RAILS_SITE"]]);
  _paq.push(["disableCookies"]);
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  (function() {
    var u="https://matomo.MY_MATOMO_HOST/";
    _paq.push(['setTrackerUrl', u+'matomo.php']);
    _paq.push(['setSiteId', '2']);
    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);
+  g.type='text/javascript'; g.async=true; g.src=u+'matomo.js'; 
  s.parentNode.insertBefore(g,s);
  })();


  // From https://github.com/turbolinks/turbolinks/issues/436#issuecomment-456862864
  // Send Matomo a new event when navigating to a new page using Turbolinks
  // (see https://developer.matomo.org/guides/spa-tracking)
  (function() {
    var previousPageUrl = null;
    addEventListener('turbolinks:load', function(event) {
      if (previousPageUrl) {
+       var _paq = window._paq = window._paq || [];
        _paq.push(['setReferrerUrl', previousPageUrl]);
        _paq.push(['setCustomUrl', window.location.href]);
        _paq.push(['setDocumentTitle', document.title]);

_paq变量的赋值方式不同,并且工作代码段缺少g.defer=true位。此外,现在在Turbolinks事件处理程序中指定了_paq

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

https://stackoverflow.com/questions/60585079

复制
相关文章

相似问题

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