javascript - SPA 上的 Google 优化 JS API
问题描述
我的 SPA 上的 Google Optimize JS API 有问题,回调仅在页面重新加载时运行,但是在向后和转发到特定页面时,回调没有运行。这是场景:
1) 我重新加载应用程序并转到我的页面进行 A/B 测试:mysite.com/testpage
2)正在运行以下代码:
gtag('event', 'optimize.callback', {
name: experimentId,
callback: useVariant,
});
并被useVariant(variantId)
称为设置正确的variantId。
3) 我单击或导航离开该页面,然后单击/导航回到 mysite.com/testpage,这是一个 SPA,请注意。
4)gtag()
代码被重新调用,但回调useVariant()
没有被运行。
5)WTF。
6)如果我使用 CMD+R 重新加载页面(是的,我使用的是 Mac),代码将按照第 1 点运行)并且一切正常。
我尝试了以下方法:
A. 使用重置数据层google_tag_manager['xxx'].datalayer.reset()
B. 使用未定义的回调重新推送事件gtag('event', 'optimize.callback', undefined)
C. 重置datalayer = [] manually
D.optimize.callback
从数据层中移除事件
E. 以上的任意组合(有时会产生一些有趣的结果)
所以问题在第5点:WTF?非常感谢任何建议/想法。
谢谢!
解决方案
我终于解决了!这是修复它的方法,也许这对其他人有帮助。
问题是回调函数 useVariant
。我已经将它定义为useVariant(variantId)
显然(感谢谷歌文档对此很清楚,不是)它必须是useVariant(variantId, experimentId)
因此,通过将回调函数更改为采用两个参数,代码将起作用。
推荐阅读
- php - 将数据存储到 Laravel 中的另一个表后,从不同模型更新字段
- aws-java-sdk - 如何通过 AWSPricingClientBuilder 最新版本的 sdk 初始化“AWSPricing 客户端”?
- django - 如何在 django 中运行 Select 和 where 语句
- javascript - HTML JavaScript document.getElementById
- android - 在没有 FCM 的打瞌睡时通过推送通知唤醒 android 应用
- c# - 将托管 VS 测试项目中的 std::vector 传递给托管 Dll
- class - 网站 html 检查器 wc3validator 但显示致命错误
- android - GLTF 物体在加载时接地
- javascript - 将带有图像和标题的元标记添加到 Angular 6 项目
- android - 如何在 Android Studio 中从 Firebase 实时数据库中的 URL 检索图像