Я использую Google Analytics для отслеживания пользовательских событий в моем приложении реагирования. Когда я впервые развернул код, я прочитал этот документ , предлагая использовать метод gtag
вместо метода ga
для регистрации вызовов. Это работает нормально.
Я использую Google Tag Manager, поэтому все эти скрипты загружаются через GTM (предположительно).
Теперь я делаю что-то более хитрое, сервер нуждаетсясказать клиенту войти на страницу загрузки в конкретном случае. Поэтому я адаптировал код инициализации GTM так, что событие запускается после загрузки GTM. Я читал, как это сделать здесь .
Странно то, что при обратном вызове, указывающем на загрузку библиотеки GTM, gtag
не определяется и код для регистрации события в Analyticsвыходит из строя. К тому времени, когда я смогу набрать gtag
в консоли браузера, он уже определен, поэтому, возможно, скрипт GTM загружает его вторично? ? Или есть способ узнать, когда объект gtag
доступен после опроса (очень хочется этого избежать)?
Это код, который я использую для загрузки GTM
class InitDataLayer extends Component {
componentDidMount = () => {
window.dataLayer = [{
appName: 'promos',
}];
}
render = () => (<script id="init-data-layer" />)
}
class LoadGtm extends Component {
componentDidMount = () => {
(function(w,d,s,l,i) {
w[l]=w[l]||[];
w[l].push({
'gtm.start': new Date().getTime(),
event:'gtm.js'
});
var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),
dl=l!='dataLayer'?'&l='+l:'';
j.async=true;
j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;
f.parentNode.insertBefore(j,f);
j.addEventListener('load', () => {
const _ge = new CustomEvent('gtm_loaded', { bubbles: true });
d.dispatchEvent(_ge);
});
})(window,document,'script','dataLayer','GTM-XXXXXXX');
}
render = () => (<script id="load-gtm" />)
}