Javascript 用于捕获通用分析的链接单击事件的Jquery脚本

Javascript 用于捕获通用分析的链接单击事件的Jquery脚本,javascript,jquery,google-analytics,universal,analytics.js,Javascript,Jquery,Google Analytics,Universal,Analytics.js,我正试图通过谷歌环球分析设置事件跟踪。我找到了一个脚本示例,它似乎完全符合我的需要——即跟踪页面中的各种锚定点击并相应地对它们进行分类。然而,我对javascript的理解还很初级,我需要帮助来理解为什么这个脚本不能工作。基本上,点击事件似乎根本不会被触发。我选中了-脚本加载正常,加载后可以显示alertbox。加载analytics.js和Jquery后,脚本将放在页面头部的最后一个位置 希望这是我错过的一些明显的东西,非常感谢。罗伯特 <script type='text/javasc

我正试图通过谷歌环球分析设置事件跟踪。我找到了一个脚本示例,它似乎完全符合我的需要——即跟踪页面中的各种锚定点击并相应地对它们进行分类。然而,我对javascript的理解还很初级,我需要帮助来理解为什么这个脚本不能工作。基本上,点击事件似乎根本不会被触发。我选中了-脚本加载正常,加载后可以显示alertbox。加载analytics.js和Jquery后,脚本将放在页面头部的最后一个位置

希望这是我错过的一些明显的东西,非常感谢。罗伯特

<script type='text/javascript'>
if (typeof jQuery != 'undefined') {
    var filetypes = /\.(zip|exe|dmg|pdf|doc.*|xls.*|ppt.*|mp3|txt|rar|wma|mov|avi|wmv|flv|wav)$/i;
    var baseHref = '';
    if (jQuery('base').attr('href') != undefined) baseHref = jQuery('base').attr('href');
    var hrefRedirect = '';

    jQuery('body').on('click', 'a', function(event) {

        var el = jQuery(this);
        var track = true;
        var href = (typeof(el.attr('href')) != 'undefined' ) ? el.attr('href') : '';
        var isThisDomain = href.match(document.domain.split('.').reverse()[1] + '.' + document.domain.split('.').reverse()[0]);
        if (!href.match(/^javascript:/i)) {
            var elEv = []; elEv.value=0, elEv.non_i=false;
            if (href.match(/^mailto\:/i)) {
                elEv.category = 'email';
                elEv.action = 'click';
                elEv.label = href.replace(/^mailto\:/i, '');
                elEv.loc = href;
            }
            else if (href.match(filetypes)) {
                var extension = (/[.]/.exec(href)) ? /[^.]+$/.exec(href) : undefined;
                elEv.category = 'download';
                elEv.action = 'click-' + extension[0];
                elEv.label = href.replace(/ /g,'-');
                elEv.loc = baseHref + href;
            }
            else if (href.match(/^https?\:/i) && !isThisDomain) {
                elEv.category = 'external';
                elEv.action = 'click';
                elEv.label = href.replace(/^https?\:\/\//i, '');
                elEv.non_i = true;
                elEv.loc = href;

            }
            else if (href.match(/^https?\:/i) && isThisDomain) {
                elEv.category = 'internal';
                elEv.action = 'click';
                elEv.label = href.replace(/^https?\:\/\//i, '');
                elEv.non_i = true;
                elEv.loc = href;

            }            
            else if (href.match(/^tel\:/i)) {
                elEv.category = 'telephone';
                elEv.action = 'click';
                elEv.label = href.replace(/^tel\:/i, '');
                elEv.loc = href;
            }
            else track = false;


            if (track) {
                var ret = true;

                if((elEv.category == 'external' || elEv.category == 'download') && (el.attr('target') == undefined || el.attr('target').toLowerCase() != '_blank') ) {
                    hrefRedirect = elEv.loc;

                    ga('send','event', elEv.category.toLowerCase(),elEv.action.toLowerCase(),elEv.label.toLowerCase(),elEv.value,{
                        'nonInteraction': elEv.non_i ,
                        'hitCallback':gaHitCallbackHandler
                    });

                    ret = false;
                }
                else {
                    ga('send','event', elEv.category.toLowerCase(),elEv.action.toLowerCase(),elEv.label.toLowerCase(),elEv.value,{
                        'nonInteraction': elEv.non_i
                    });
                }

                return ret;
            }
        }
    });

    gaHitCallbackHandler = function() {
        window.location.href = hrefRedirect;
    }
}
</script>

if(jQuery的类型!=“未定义”){
var filetypes=/\(zip | exe | dmg | pdf | doc.*xls.*ppt.*mp3 | txt | rar | wma | mov | avi | wmv | flv | wav)$/i;
var baseHref='';
if(jQuery('base').attr('href')!=未定义)baseHref=jQuery('base').attr('href');
var hrefRedirect='';
jQuery('body')。关于('click','a',函数(事件){
var el=jQuery(this);
var track=true;
var href=(typeof(el.attr('href'))!='undefined')?el.attr('href'):'';
var isThisDomain=href.match(document.domain.split('.').reverse()[1]+'.+document.domain.split('.').reverse()[0]);
如果(!href.match(/^javascript:/i)){
变量elEv=[];elEv.value=0,elEv.non_i=false;
如果(href.match(/^mailto\:/i)){
elEv.category=‘电子邮件’;
elEv.action='单击';
elEv.label=href.replace(/^mailto\:/i',);
elEv.loc=href;
}
else if(href.match(文件类型)){
变量扩展=(/[..]/.exec(href))?/[^.]+$/.exec(href):未定义;
elEv.category='下载';
elEv.action='单击-'+扩展[0];
elEv.label=href.replace(//g,'-');
elEv.loc=baseHref+href;
}
else if(href.match(/^https?\:/i)和&!isThisDomain){
电气类别=‘外部’;
elEv.action='单击';
elEv.label=href.replace(/^https?\:\/\//i',);
elEv.non_i=真;
elEv.loc=href;
}
else if(href.match(/^https?\:/i)和&isThisDomain){
电气类别=‘内部’;
elEv.action='单击';
elEv.label=href.replace(/^https?\:\/\//i',);
elEv.non_i=真;
elEv.loc=href;
}            
else if(href.match(/^tel\:/i)){
电气类别=‘电话’;
elEv.action='单击';
elEv.label=href.replace(/^tel\:/i',);
elEv.loc=href;
}
else track=false;
如果(轨道){
var-ret=真;
如果((elEv.category=='external'| | elEv.category=='download')&&(el.attr('target')==未定义的| | el.attr('target')。toLowerCase()!='u blank')){
hrefRedirect=elEv.loc;
ga('send','event',elEv.category.toLowerCase(),elEv.action.toLowerCase(),elEv.label.toLowerCase(),elEv.value{
“非交互”:elEv.non_i,
“hitCallback”:gaHitCallbackHandler
});
ret=假;
}
否则{
ga('send','event',elEv.category.toLowerCase(),elEv.action.toLowerCase(),elEv.label.toLowerCase(),elEv.value{
“非交互”:elEv.non_i
});
}
返回ret;
}
}
});
gaHitCallbackHandler=函数(){
window.location.href=hrefRedirect;
}
}

根据您所给出的,几乎没有什么事情会出错

  • 页面中没有
    base
    标记。您需要在页面中有一个
  • 脚本被添加到
    头中
    。然后,
    body
    元素仍然没有加载,因此您需要在dom就绪处理程序中添加脚本/将委托处理程序注册到
    文档
    对象,而不是
    body
  • 假设jQuery已正确加载并在脚本尝试之前添加

    <base href="yourbaseurl" />
    

    是否加载jQuery?它是在这个脚本之前加载的吗?浏览器控制台中是否有任何错误是在
    head
    body
    中添加的脚本在带有href属性的页面中是否有名为
    base
    的元素您在哪里添加了
    alert
    语句来测试脚本您是否尝试了我的代码。。。我已经为它添加了一个dom就绪处理程序…您好,谢谢您的回复。我在else track=false之后添加了alertbox;现在我添加了base标记。这个脚本是脑子里的最后一个脚本。这非常有用-现在我需要研究一下为什么内部链接似乎没有被捕获。我睡了4个小时,可能我们在不同的地方timezones@r0berts你从哪里来再次感谢对不起,我还不能投票,声誉太低,但是我会尝试检查代码的其余部分,这样当我检查这个答案时,代码就可以供其他人使用了,所有的位都正常工作,可以吗?
    if (typeof jQuery != 'undefined') {
        jQuery(function(){
            var filetypes = /\.(zip|exe|dmg|pdf|doc.*|xls.*|ppt.*|mp3|txt|rar|wma|mov|avi|wmv|flv|wav)$/i;
            var baseHref = '';
            if (jQuery('base').attr('href') != undefined) baseHref = jQuery('base').attr('href');
            var hrefRedirect = '';
    
            jQuery('body').on('click', 'a', function(event) {
    
                var el = jQuery(this);
                var track = true;
                var href = (typeof(el.attr('href')) != 'undefined' ) ? el.attr('href') : '';
                var isThisDomain = href.match(document.domain.split('.').reverse()[1] + '.' + document.domain.split('.').reverse()[0]);
                if (!href.match(/^javascript:/i)) {
                    var elEv = []; elEv.value=0, elEv.non_i=false;
                    if (href.match(/^mailto\:/i)) {
                        elEv.category = 'email';
                        elEv.action = 'click';
                        elEv.label = href.replace(/^mailto\:/i, '');
                        elEv.loc = href;
                    }
                    else if (href.match(filetypes)) {
                        var extension = (/[.]/.exec(href)) ? /[^.]+$/.exec(href) : undefined;
                        elEv.category = 'download';
                        elEv.action = 'click-' + extension[0];
                        elEv.label = href.replace(/ /g,'-');
                        elEv.loc = baseHref + href;
                    }
                    else if (href.match(/^https?\:/i) && !isThisDomain) {
                        elEv.category = 'external';
                        elEv.action = 'click';
                        elEv.label = href.replace(/^https?\:\/\//i, '');
                        elEv.non_i = true;
                        elEv.loc = href;
    
                    }
                    else if (href.match(/^https?\:/i) && isThisDomain) {
                        elEv.category = 'internal';
                        elEv.action = 'click';
                        elEv.label = href.replace(/^https?\:\/\//i, '');
                        elEv.non_i = true;
                        elEv.loc = href;
    
                    }            
                    else if (href.match(/^tel\:/i)) {
                        elEv.category = 'telephone';
                        elEv.action = 'click';
                        elEv.label = href.replace(/^tel\:/i, '');
                        elEv.loc = href;
                    }
                    else track = false;
    
    
                    if (track) {
                        var ret = true;
    
                        if((elEv.category == 'external' || elEv.category == 'download') && (el.attr('target') == undefined || el.attr('target').toLowerCase() != '_blank') ) {
                            hrefRedirect = elEv.loc;
    
                            ga('send','event', elEv.category.toLowerCase(),elEv.action.toLowerCase(),elEv.label.toLowerCase(),elEv.value,{
                                'nonInteraction': elEv.non_i ,
                                'hitCallback':gaHitCallbackHandler
                            });
    
                            ret = false;
                        }
                        else {
                            ga('send','event', elEv.category.toLowerCase(),elEv.action.toLowerCase(),elEv.label.toLowerCase(),elEv.value,{
                                'nonInteraction': elEv.non_i
                            });
                        }
    
                        return ret;
                    }
                }
            });
    
            var gaHitCallbackHandler = function() {
                window.location.href = hrefRedirect;
            }    
        });
    }