google-analytics - 当我的应用加载到跨域 iframe 中时,为什么 Google Analytics 不发送匹配?
问题描述
我有一个基本的静态/单页应用程序,我将 Google Analytics 4 (GA4) 添加到使用gtag
. 当我通过 http://localhost:8080 在本地加载我的应用程序时,会按预期跟踪页面浏览量。但是,当我通过应用程序在 iframe 中的另一个站点上嵌入时,不会发送任何点击。
为了调试它,我查看了 Chrome 网络检查器中的网络请求。当我直接在 http://localhost:8080 打开我的应用程序时,我可以看到对https://analytics.google.com/g/collect?...的请求。在网络请求中。但是,当我在 iframe 中加载我的应用程序时(例如,我添加<iframe src="http://localhost:8080"></iframe>
到另一个页面),我注意到没有发送此请求。我还确认,即使我可以看到用于 gtag 加载的 JavaScript,Google Analytics 的实时视图中也没有显示任何数据。
我还使用https://tagassistant.google.com/上的 Tag Assistant 进行了调试。即使我连接到在 iframe 中运行的应用程序,调试器也会显示所有事件都按预期注册,但在发送的命中数下,它会显示“此容器未发送任何命中数”。
为什么在 iframe 中加载应用程序时,相同跟踪代码的行为会有所不同?如何确保始终发送命中?
更新:这似乎与跨域 iframe 中不可用的 cookie 有关,但有解决方法吗?
解决方案
默认情况下,由于SameSite cookie 设置强制,跟踪失败。默认情况下,cookie 在第三方上下文中不可用,这包括来自不同域的 iframe。
通过使用cookie_flags 配置( docs ),您可以允许从第三方上下文读取 cookie。会有一些警告,这会因浏览器而异,因为隐私限制不断增加。
但是,目前,只要您的站点安全,配置cookie_flags
中的设置就可以解决问题:gtag
gtag('config', '<MEASUREMENT_ID>', {
cookie_flags: 'SameSite=None;Secure'
})
请注意,这实际上不适用于 http://localhost:8080,因为它不安全,但是一旦将站点部署到生产环境,希望您将使用 https。
推荐阅读
- python - 替换:在 Python 中的 DATETIME 中用于 api 请求
- xml - 项目的默认 XML 命名空间必须是 MSBuild XML 命名空间。在 VS2015 专业版中
- mongodb - 如何在 docker 容器内连接主机服务器 MongoDB?
- python - 如何使用 python scipy.integrate.cumtrapz 创建一个数据框,其中包含曲线下累积面积和时间的列?
- java - 在 EC2 实例中自动执行命令
- react-native - ReferenceError:未定义导航
- sql - 如何根据另一个表的输出推断一个表的输出?
- python - 如何比较字典的多个值并打印特定的值
- python - boots.com 使用什么类型的抓取方法
- c# - 用于批量上传到 oracle 的可视化或开源库用于批量上传到 oracle 的开源库