85 lines
2.2 KiB
JavaScript
85 lines
2.2 KiB
JavaScript
function injectGtm(id) {
|
|
const w = window;
|
|
w.dataLayer = w.dataLayer || [];
|
|
w.dataLayer.push({ 'gtm.start': Date.now(), event: 'gtm.js' });
|
|
const firstScript = document.getElementsByTagName('script')[0];
|
|
const gtmScript = document.createElement('script');
|
|
gtmScript.async = true;
|
|
gtmScript.src = 'https://www.googletagmanager.com/gtm.js?id=' + id;
|
|
firstScript.parentNode.insertBefore(gtmScript, firstScript);
|
|
const nos = document.createElement('noscript');
|
|
const iframe = document.createElement('iframe');
|
|
iframe.src = 'https://www.googletagmanager.com/ns.html?id=' + id;
|
|
iframe.height = '0';
|
|
iframe.width = '0';
|
|
iframe.setAttribute('style', 'display:none;visibility:hidden');
|
|
nos.appendChild(iframe);
|
|
document.body.insertBefore(nos, document.body.firstChild);
|
|
}
|
|
|
|
|
|
function injectGtag(ids) {
|
|
const list = ids.filter(Boolean);
|
|
if (!list.length) {
|
|
return;
|
|
}
|
|
const s = document.createElement('script');
|
|
s.async = true;
|
|
s.src = 'https://www.googletagmanager.com/gtag/js?id=' + list[0];
|
|
document.head.appendChild(s);
|
|
window.dataLayer = window.dataLayer || [];
|
|
function gtag() {
|
|
window.dataLayer.push(arguments);
|
|
}
|
|
window.gtag = gtag;
|
|
gtag('js', new Date());
|
|
list.forEach((id) => {
|
|
gtag('config', id);
|
|
});
|
|
}
|
|
|
|
|
|
function injectYandex(id, webvisor) {
|
|
if (!id) {
|
|
return;
|
|
}
|
|
(function (m, e, t, r, i, k, a) {
|
|
m[i] =
|
|
m[i] ||
|
|
function () {
|
|
(m[i].a = m[i].a || []).push(arguments);
|
|
};
|
|
m[i].l = 1 * new Date();
|
|
for (let j = 0; j < document.scripts.length; j += 1) {
|
|
if (document.scripts[j].src === r) {
|
|
return;
|
|
}
|
|
}
|
|
k = e.createElement(t);
|
|
a = e.getElementsByTagName(t)[0];
|
|
k.async = 1;
|
|
k.src = r;
|
|
a.parentNode.insertBefore(k, a);
|
|
})(window, document, 'script', 'https://mc.yandex.ru/metrika/tag.js', 'ym');
|
|
window.ym(id, 'init', {
|
|
clickmap: true,
|
|
trackLinks: true,
|
|
accurateTrackBounce: true,
|
|
webvisor: !!webvisor,
|
|
});
|
|
}
|
|
|
|
|
|
function runTracking() {
|
|
const c = window.__SITE_CONFIG__ || {};
|
|
if (c.gtmContainerId) {
|
|
injectGtm(c.gtmContainerId);
|
|
} else {
|
|
injectGtag([c.ga4MeasurementId, c.googleAdsId].filter(Boolean));
|
|
}
|
|
injectYandex(c.yandexMetrikaId, c.yandexWebvisor);
|
|
}
|
|
|
|
|
|
runTracking();
|