如何检测 Google Analytics 是否已加载并能够跟踪自定义事件

Gui*_*rmo 5 iframe google-analytics mobile-safari google-analytics-api google-analytics-firebase

当我们加载带有视频播放器的 iframe 时,我们遇到了一些问题,该播放器将播放事件发送到加载在该 iframe 中(在另一个域上)的 Google Universal Analytics (analytics.js)。GA 跟踪器未加载到 iOS 设备上,因此,不会向 GA 发送任何事件跟踪。

在 Android 和其他设备(包括台式机)上,它运行良好,但在 iOS 上则不行,除非我更改了 iOS Safari 上默认的第三方 cookie 设置。

我使用 Google Analytics ( https://github.com/Foture/cookieless-google-analytics )的无 cookie 方法进行了测试,这样 iOS 设备就能够正确地将跟踪事件发送到 GA。但是,我只想在常规 GA 方法不起作用时使用该方法作为后备,因为通过指纹方法创建的 UserId 在移动设备上不是很独特。

所以我需要一种方法来检测常规 GA 方法何时能够跟踪事件,如果不能,要么是因为没有加载跟踪器,要么是禁用了 cookie,然后使用无 cookie 方法来加载 GA 并跟踪事件。

谢谢!

Phi*_*cki 1

您可以尝试在对象上使用(看似)未记录的属性gaga.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>
Run Code Online (Sandbox Code Playgroud)

因此,您可以尝试类似的操作:

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.
   // ...
}
Run Code Online (Sandbox Code Playgroud)