Как определить, загружен ли Google Analytics и может ли он отслеживать пользовательские события

У нас возникают проблемы при загрузке iframe с помощью видеопроигрывателя, который отправляет события воспроизведения в Google Universal Analytics (analytics.js), загруженные внутри этого iframe (в другом домене). Трекер GA не загружается на устройства iOS, поэтому в GA не отправляется отслеживание событий.

На Android и других устройствах, включая настольные компьютеры, он работает нормально, но не на iOS, если только я не изменил настройку сторонних файлов cookie, которая по умолчанию используется в iOS Safari.

Я провел тест, используя метод без файлов cookie для Google Analytics (https://github.com/Foture/cookieless-google-analytics), и таким образом устройства iOS могли правильно отправлять события отслеживания в GA. Однако я хочу использовать этот метод только в качестве запасного варианта, когда обычный метод GA не работает, потому что UserId, созданный с помощью метода Fingerprint, не очень уникален на мобильных устройствах.

Поэтому мне нужен способ определить, когда обычный метод GA может отслеживать события, а если нет, либо из-за того, что трекер не был загружен, либо файлы cookie отключены, то используйте метод без файлов cookie для загрузки GA и отслеживания событий.

Спасибо!




Ответы (2)


Вы должны использовать проверку переменных JavaScript window.ga && ga.loaded перед использованием метода ga() для отслеживания событий:

if(window.ga && ga.loaded) { {
    // if yes, rely on GA to follow link
    ga('send', 'event', 'outbound', 'click', url, {
        'transport': 'beacon',
        'hitCallback': function(){document.location = url;}
    });
} else {
    // if not, follow link ourselves
    document.location = url;
}

Дополнительные сведения см. на https://hacks.mozilla.org/2016/01/google-analytics-privacy-and-event-tracking/

person CralDk    schedule 24.02.2016
comment
Интересно, что ga.loaded официально не задокументировано, но Google также использует его в примерах, например. здесь developers.google.com/analytics/devguides/collection/ - person mikep; 17.02.2020
comment
Я скорее использовал собственное решение, чтобы не зависеть от недокументированного ga.loaded. Я обновил код аналитики JS... (function(i,s,o,g,r,a,m){ ... a.onload = function(){ i[r].isLoaded = true } ... }, а затем я могу протестировать ga.isLoaded. - person mikep; 17.02.2020

Вы можете попробовать использовать (на первый взгляд) недокументированное свойство объекта ga: ga.loaded.

Единственная ссылка на это свойство, которую я смог найти в официальной документации, содержится в примере, описывающем использование hitCallback для отслеживания электронной торговли:

// Called when a link to a product is clicked.
function onProductClick() {
   // Truncated Google Analytics example for brevity.
   // [...]
}

<a href="/next-page.html" onclick="onProductClick(); return !ga.loaded;">Android Warhol T-Shirt</a>

Таким образом, вы можете попробовать что-то похожее на:

if (typeof ga !== 'undefined' && ga.hasOwnProperty('loaded') && ga.loaded === true) {
   // ga successfully loaded. Custom Events available
   // ...
} else {
   // ga not loaded, fallback to another tracking implementation.
   // ...
}
person Philippe Sawicki    schedule 29.04.2015
comment
Хотя документы Google по отслеживанию электронной торговли все еще содержат этот лакомый кусочек кода, ссылающийся на ga.loaded, на самом деле это не так (или, по крайней мере, не во всех конфигурациях, использующих универсальную аналитику). Кажется, достаточно проверить на typeof window.ga == "function" - person Mahmoud Al-Qudsi; 21.11.2018