触发GTM事件并同时使用replaceState更新历史API

时间:2017-08-14 15:06:53

标签: javascript google-tag-manager html5-history google-datalayer

当像这样触发GTM标签时:

dataLayer.push({
        'event': 'gtm.trackEvent',
        'eventCategory': 'Offices',
        'eventAction': 'Search',
        'eventLabel': '1234AB',
        'eventNonInteraction': 1
});

同时还使用历史记录API更新网址栏,如下所示:

window.history.replaceState({}, '', '/offices?office=1234AB');

网址栏意外行为。会发生什么:

  1. 网址栏从当前状态开始(例如/ path?office = current-param
  2. 网址栏被历史记录API替换(例如/ path?office = 1234AB)
  3. 网址栏会被页面视图的第一个状态所取代(例如/ path?param = first-state
  4. 第三部分没有出现的唯一方法是禁用/评论GTM标签。因此我假设GTM不能很好地处理History API的状态。

    我想知道是否有可能禁用GTM中历史API发生的任何事情。

    更新 使用eventCallback属性,我可以确保无论何时触发事件,都会事后调用历史记录replaceState,从而产生正确的结束状态(/ path?office = 1234AB)。我现在的代码是:

    dataLayer.push({
            'event': 'gtm.trackEvent',
            'eventCategory': 'Offices',
            'eventAction': 'Search',
            'eventLabel': '1234AB',
            'eventNonInteraction': 1,
            'eventCallback': function() {
                window.history.replaceState({}, '', '/offices?office=1234AB');
            }
    });
    

    我仍然看到从原始状态跳转到新状态:(第2点和第3点切换)

    1. 网址栏从当前状态开始(例如/ path?office = current-param
    2. 网址栏会被页面视图的第一个状态所取代(例如/ path?param = first-state
    3. 网址栏被历史记录API替换(例如/ path?office = 1234AB)

0 个答案:

没有答案