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