piwik setCustomVariable无法正常工作

时间:2014-02-27 15:57:05

标签: javascript matomo

我使用piwik来跟踪我的网页访问,它运行正常。 我刚将此代码添加到我页面上的javascript中:

var _paq = _paq || [];
      _paq.push(['trackPageView']);
      _paq.push(['enableLinkTracking']);
      (function() {
        var u=(("https:" == document.location.protocol) ? "https" : "http") + "mypiwiklink";
        _paq.push(['setTrackerUrl', u+'piwik.php']);
        _paq.push(['setSiteId', 1]);
        var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript';
        g.defer=true; g.async=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
       })();
      // end piwik track code

此代码没有问题。这是标准的。 现在我想添加一个自定义变量,它跟踪我页面上每个特定函数的调用。 所以在函数的代码中,我添加了:

   var selectTableRowHandler = function() {

        // function code

        //piwik code inside the function code:

                                 var _paq = _paq || [];
                                _paq.push(['setCustomVariable',  
                                    1, 
                                    "Visitor",
                                    "myfile", 
                                    "page" 
                                    ]);
                                  _paq.push(['trackPageView']);
                                  _paq.push(['enableLinkTracking']);
                                  (function() {
                                    var u=(("https:" == document.location.protocol) ? "https" : "http") + "mypiwiklink";
                                    _paq.push(['setTrackerUrl', u+'piwik.php']);
                                    _paq.push(['setSiteId', 1]);
                                    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript';
                                    g.defer=true; g.async=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
                                  })();


// end of function code here

}

当我调试时,我发现代码执行没有错误,但我看不到在piwik仪表板上添加的任何自定义varibales。 我究竟做错了什么? 谢谢!

2 个答案:

答案 0 :(得分:1)

在函数内部,您应该使用window._paq而不是_paq

答案 1 :(得分:0)

我假设您已经将pageView跟踪代码放入/插入了 .. 标记中。代码可能如下所示(根据最新的matomo跟踪代码,已将_paq更改为window._paq ):

<script> var _paq = window._paq || [];
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  (function() {
    var u=(("https:" == document.location.protocol) ? "https" : "http") + "mypiwiklink";
    _paq.push(['setTrackerUrl', u+'piwik.php']);
    _paq.push(['setSiteId', 1]);
    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript';
    g.defer=true; g.async=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
   })(); // end piwik track code
  </script> 

到目前为止,您的代码可以正常工作并捕获数据。但是,当您尝试在功能中包含此代码时,Matomo将停止跟踪该网站上的访问。为避免这种情况,只需按如下所示修改您的代码:

如果您想将此跟踪代码放入函数中,请在函数外部定义_paq,如下所示:

<script> 
//define _paq outside the function. Its scope should not be limited up to this function only. It will be used to track individual events as well in the body tag.
var _paq = window._paq || [];  
var selectTableRowHandler = function() {

    // function code

    //piwik code inside the function code:


                            _paq.push(['setCustomVariable',  
                                1, 
                                "Visitor",
                                "myfile", 
                                "page" 
                                ]);
                              _paq.push(['trackPageView']);
                              _paq.push(['enableLinkTracking']);
                              (function() {
                                var u=(("https:" == document.location.protocol) ? "https" : "http") + "mypiwiklink";
                                _paq.push(['setTrackerUrl', u+'piwik.php']);
                                _paq.push(['setSiteId', 1]);
                                var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript';
                                g.defer=true; g.async=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
                              })();// end of function code here}     
 </script> 

尝试上述对我有用的解决方案。让我知道您是否仍然遇到问题。