3

我的 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?非常感谢任何建议/想法。

谢谢!

4

2 回答 2

0

我终于解决了!这是修复它的方法,也许这对其他人有帮助。

问题是回调函数 useVariant。我已经将它定义为useVariant(variantId)显然(感谢谷歌文档对此很清楚,不是)它必须是useVariant(variantId, experimentId)

因此,通过将回调函数更改为采用两个参数,代码将起作用。

于 2019-08-02T09:00:58.893 回答
-1

对于 React,您可以在顶级组件componentDidMountcomponentDidUpdate生命周期方法中实现激活事件,以便在组件在页面上安装或更新后立即运行实验代码。

您的代码可能如下所示:

import React from 'react';
export default class App extends React.Component {
    componentDidMount() {
        dataLayer.push({ 'event': 'optimize.activate' });
    }
    componentDidUpdate() {
        dataLayer.push({ 'event': 'optimize.activate' });
    }
    render() {
        // experiment code goes here...
    }
}

Google 上的 SPA 测试优化

于 2020-02-06T11:59:26.273 回答