Google analytics 使用gtag.js时,如何获取跨域跟踪所需的Google Analytics_ga linker参数
我的代码使用Javascript window.open链接到另一个域。目标页面的url是动态生成的。我想跨域跟踪分析,但无法使用gtag、js的标准“链接器”自动方法,该方法会自动将_ga参数添加到“a”标记href属性或“表单”的操作属性中。我需要能够手动将_ga属性添加到动态生成的URL中,然后在window.open中使用该URL 我尝试创建一个虚拟的“a href”,然后在事件处理程序中使用dispatchEvent和preventDefault模拟“单击”。这适用于真实的单击事件(将_ga参数附加到href URL,然后我可以提取并使用该URL),但不适用于带有dispatchEvent的模拟单击事件 使用旧的analytics.js实现可以轻松获得客户端ID,但我找不到如何使用gtag.js实现 简单地说,使用analytics.js,可以使用以下代码获取“LinkerParam”字段: gtag.js的等价物是什么Google analytics 使用gtag.js时,如何获取跨域跟踪所需的Google Analytics_ga linker参数,google-analytics,cross-domain,gtag.js,Google Analytics,Cross Domain,Gtag.js,我的代码使用Javascript window.open链接到另一个域。目标页面的url是动态生成的。我想跨域跟踪分析,但无法使用gtag、js的标准“链接器”自动方法,该方法会自动将_ga参数添加到“a”标记href属性或“表单”的操作属性中。我需要能够手动将_ga属性添加到动态生成的URL中,然后在window.open中使用该URL 我尝试创建一个虚拟的“a href”,然后在事件处理程序中使用dispatchEvent和preventDefault模拟“单击”。这适用于真实的单击事件(将
有人能帮忙吗?好的,我已经知道怎么做了,想在这里分享一下。这对我来说很有效,但我不能保证这是最好的方式。 gtag.js似乎也会自动加载analytics.js,但它不会通过“创建”来设置跟踪ID。 在本例中,我假设使用标准全局对象,window.dataLayer用于gtag.js,window.ga用于analytics.js
function getLinkerParam(){
// our global variables
window.glpReady = false; // set to true when glpLinkerParam is set
window.glpLinkerParam = null; // the linkerParam
// define variables will be used in this function
var analyticsTimeout = null;
var timeoutFired = false;
var timeoutPeriod = 1000;
// Code to initialse analytics.js if necessary
function initialiseAnalytics(){
if (!window.GoogleAnalyticsObject){
window.GoogleAnalyticsObject = 'ga';
window.ga = window.ga || function(){
(window.ga.q = window.ga.q || []).push(arguments);
};
window.ga.l = 1 * new Date();
}
}
// initialise analytics.js if necessary
checker: {
// is gtag.js installed?
if (window.dataLayer) { // Yes
// obtain the tracking ID from the dataLayer
for (var i = 0; i < window.dataLayer.length; i++){
if (window.dataLayer[i][0] == 'config') {
// initialise the tracking with a create
console.log('trackingID='+window.dataLayer[i][1]);
initialiseAnalytics();
window.ga('create', window.dataLayer[i][1]);
break checker;
}
}
}
else {
// gtag.js is NOT installed
// check for analytics.js installed
if (window.GoogleAnalyticsObject){
// analytics.js is installed in it;s own right
// so the create should already be done.
break checker;
}
}
console.log('analytics not installed or config tracker id not found');
window.glpReady = true;
return;
} // end checker
// here analytics.js is defined either in it's own right
// or as part of gtag.js. In either case the tracking ID should have been 'created'.
ga('require', 'linker');
ga(function(tracker) {
console.log('Client ID: '+tracker.get('clientId'));
});
// set a timeout for the linkerParam
analyticsTimeout = setTimeout(function(){
timeoutFired = true;
console.log('get linkerParam timeout fired');
window.glpReady = true;
return;
}, timeoutPeriod);
// get the linkerParam
console.log('Get linkerParam');
ga(function(tracker) {
var linkerParam = tracker.get('linkerParam');
console.log('got linkerParam: '+linkerParam);
clearTimeout(analyticsTimeout);
window.glpLinkerParam = linkerParam;
window.glpReady = true;
return;
});
}
函数getLinkerParam(){
//我们的全局变量
window.glpReady=false;//设置glpLinkerParam时设置为true
window.glpLinkerParam=null;//链接参数
//定义变量将在此函数中使用
var分析估计值=零;
var timeoutFired=false;
var timeoutPeriod=1000;
//必要时初始化analytics.js的代码
函数initialiseAnalytics(){
如果(!window.GoogleAnalyticsObject){
window.GoogleAnalyticsObject='ga';
window.ga=window.ga | |函数(){
(window.ga.q=window.ga.q | |[]).push(参数);
};
window.ga.l=1*新日期();
}
}
//如有必要,初始化analytics.js
检查人:{
//是否安装了gtag.js?
如果(window.dataLayer){//Yes
//从数据层获取跟踪ID
对于(var i=0;ifunction getLinkerParam(){
// our global variables
window.glpReady = false; // set to true when glpLinkerParam is set
window.glpLinkerParam = null; // the linkerParam
// define variables will be used in this function
var analyticsTimeout = null;
var timeoutFired = false;
var timeoutPeriod = 1000;
// Code to initialse analytics.js if necessary
function initialiseAnalytics(){
if (!window.GoogleAnalyticsObject){
window.GoogleAnalyticsObject = 'ga';
window.ga = window.ga || function(){
(window.ga.q = window.ga.q || []).push(arguments);
};
window.ga.l = 1 * new Date();
}
}
// initialise analytics.js if necessary
checker: {
// is gtag.js installed?
if (window.dataLayer) { // Yes
// obtain the tracking ID from the dataLayer
for (var i = 0; i < window.dataLayer.length; i++){
if (window.dataLayer[i][0] == 'config') {
// initialise the tracking with a create
console.log('trackingID='+window.dataLayer[i][1]);
initialiseAnalytics();
window.ga('create', window.dataLayer[i][1]);
break checker;
}
}
}
else {
// gtag.js is NOT installed
// check for analytics.js installed
if (window.GoogleAnalyticsObject){
// analytics.js is installed in it;s own right
// so the create should already be done.
break checker;
}
}
console.log('analytics not installed or config tracker id not found');
window.glpReady = true;
return;
} // end checker
// here analytics.js is defined either in it's own right
// or as part of gtag.js. In either case the tracking ID should have been 'created'.
ga('require', 'linker');
ga(function(tracker) {
console.log('Client ID: '+tracker.get('clientId'));
});
// set a timeout for the linkerParam
analyticsTimeout = setTimeout(function(){
timeoutFired = true;
console.log('get linkerParam timeout fired');
window.glpReady = true;
return;
}, timeoutPeriod);
// get the linkerParam
console.log('Get linkerParam');
ga(function(tracker) {
var linkerParam = tracker.get('linkerParam');
console.log('got linkerParam: '+linkerParam);
clearTimeout(analyticsTimeout);
window.glpLinkerParam = linkerParam;
window.glpReady = true;
return;
});
}