Geu*_*uis 26 javascript google-analytics
我正在开发一个项目,该项目会在Google Analytics自定义变量中存储一些信息.我正在构建的脚本需要检测GA是否已经加载,然后才能将数据推送到它.该项目旨在适用于使用GA的任何类型的网站.问题是可靠地检测GA是否已完成加载并且可用.
这里有几个变化:
有多种加载GA的方法.从Urchin开始的旧脚本到最新的异步脚本.其中一些是内联的,一些是异步的.此外,有些网站会像我工作那样自定义加载GA的方法.我们使用YUI getScript来加载它.
变量名称.在某些脚本中,分配给GA的变量名称是pageTracker
.在其他人,它_gaq
.然后是网站可用于实现GA的自定义变量名称的无限.
那么,是否有人想知道什么是可靠的方法来检查页面上是否正在使用Google Analytics,以及它是否已加载?
l2a*_*lba 35
这一点,你可以把代码上方/前的谷歌Analytics跟踪代码:
function check_ga() {
if (typeof ga === 'function') {
console.log('Loaded :'+ ga);
} else {
console.log('Not loaded');
setTimeout(check_ga,500);
}
}
check_ga();
Run Code Online (Sandbox Code Playgroud)
演示: http ://jsbin.com/rijiyojume/edit?html,console
或者,如果您可以在Google Analytics跟踪代码之后运行脚本:
ga(function(tracker) {
console.log(tracker.get('clientId'));
});
Run Code Online (Sandbox Code Playgroud)
演示: http ://jsbin.com/wiqategifo/1/edit?html,console
参考: #ready-callback
sou*_*arm 24
我太低了,无法回应安妮的回答,但有语法错误.分析名称首先是下划线,而setTimeout()语法是向后(并且不完整).它应该是这样的:
function checkIfAnalyticsLoaded() {
if (window._gat && window._gat._getTracker) {
// Do tracking with new-style analytics
} else if (window.urchinTracker) {
// Do tracking with old-style analytics
} else {
// Probably want to cap the total number of times you call this.
setTimeout(checkIfAnalyticsLoaded, 500);
}
}
Run Code Online (Sandbox Code Playgroud)
Ann*_*nie 15
function checkIfAnalyticsLoaded() {
if (window._gaq && window._gaq._getTracker) {
// Do tracking with new-style analytics
} else if (window.urchinTracker) {
// Do tracking with old-style analytics
} else {
// Retry. Probably want to cap the total number of times you call this.
setTimeout(checkIfAnalyticsLoaded, 500);
}
}
Run Code Online (Sandbox Code Playgroud)
我是这样做的:
var ga = window[window['GoogleAnalyticsObject'] || 'ga'];
if (typeof ga == 'function') {
// call ga object here
ga('send', 'event', 'Social Share Button', 'click', 'facebook');
}
Run Code Online (Sandbox Code Playgroud)
let checkIfAnalyticsLoaded = () => {
return new Promise((resolve, reject) => {
let timeStart = Date.now();
const TIMEOUT = 3000;
let _isLoaded = function() {
if (Date.now() - timeStart > TIMEOUT) {
reject('Timeout. Google analytics not injected!');
return;
}
if (window.ga && ga.create) {
resolve(ga);
return;
} else {
setTimeout(_isLoaded, 500);
}
};
_isLoaded();
});
}
checkIfAnalyticsLoaded()
.then((result => {
console.log('LOADED', result);
}))
.catch(console.error);
Run Code Online (Sandbox Code Playgroud)
以上方法都不适合我。也许是因为我正在通过 GTM 加载 GA,不确定。但是这个简单的方法对我来说确实可以从控制台运行:
ga.loaded
Run Code Online (Sandbox Code Playgroud)
如果您尝试从脚本中进行检查,您可能需要稍等片刻,因为 GA 在 doc ready 后加载:
var t = setTimeout(function(){
console.log(ga.loaded);
}, 999);
Run Code Online (Sandbox Code Playgroud)
小智 5
只需在窗口加载事件后检查该对象即可。
if(window.google_tag_manager){ /*It's loaded!*/ }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
35778 次 |
最近记录: |