如何确保Google Analytics customVars不会太长

时间:2011-11-24 10:05:36

标签: javascript google-analytics

根据Google Analytics

  

任何自定义变量名称和值的总组合长度可以   不超过64个字节。请记住,这不等于64   字符。因为名称和值在存储时是URI编码的,所以有些   字符使用多个字节。例如,=存储为%3D   而不是=并使用3个字节而不是1.获取URI列表   编码值,在网络上搜索URL编码参考。

我有两个问题:

  1. 这64个字节中是否应包含编码等号(=)?
  2. 我试图创建一个确保自定义名称和值不会太长的函数。 可以改进吗? (当然可以。)

    function truncateCustomVarAndSet(index, name, value, scope) {
        var keyValuePair, 
            encodedPair,
            lengthOK = false;
        while (!lengthOK && value.length > 0) {
            keyValuePair = name + '=' + value;
            encodedPair = encodeURIComponent(keyValuePair);
            lengthOK = encodedPair.length <= 64;
            if (!lengthOK) {
                value = value.substring(0, value.length - 1);
            }
        } 
        _gaq.push(['_setCustomVar', index, name, value, scope]);        
    } 
    
  3. 修改:现在使用encodeURIComponent代替encodeURI

    编辑2: @yahelc将gaq更改为_qac,因此我从参数列表中删除了gaq,因为它不再需要了。

2 个答案:

答案 0 :(得分:2)

我已经测试了推送完全组合64个字符的自定义变量,看起来64只是密钥的编码字节和值,而不是任何连接字符。

您应该使用encodeURIComponent,因为encodeURI does not encode &, +, and =

另外,不要忘记_gaq前面的下划线。 _gaq 需要成为全局变量,因此,无需将其作为参数传递。

看起来你的一般方法是有效的,并且避免了在编码字符的中间错误地裁剪字符串的问题(正如我以前的方法错误地做的那样。)

这是代码的精简版(削减~220个字符):

function truncateCustomVarAndSet(index, name, value, scope) {
    while (value.length && encodeURIComponent(name + value).length > 64) {
            value = value.substring(0, value.length-1);
    } 
    _gaq.push(['_setCustomVar', index, name, value, scope]);        
} 

经过测试:

truncateCustomVarAndSet(3,"34567890345678903=1=1=456789034567895678904567890","211222$#!#11221122112122112eeeqeqqeqefo1op2k1po12kop21pok2p1o",1)
_gaq.push(["_trackPageview"]);

记录为:

  

自定义Var 3   
  标签:'34567890345678903 = 1 = 1 = 456789034567895678904567890'   
  价值:'211222 $'   
  范围:'1'

答案 1 :(得分:1)

  1. 从描述中看来,只有当键或值具有等于时,似乎“=”才被视为集合的一部分。

  2. 我已经减少了你的功能。

  3. function truncateCustomVarAndSet(index, name, value, scope) {
        var n = encodeURIComponent(name)
            ,v = encodeURIComponent(value)
        for(;(n + v).length > 64; v=encodeURIComponent(value=value.substr(1-value.length)));
        _gaq.push(['_setCustomVar', index, name, value, scope]);        
    }