Window.ga не определяется в Firefox при использовании Google Tag Manager в React - PullRequest
0 голосов
/ 27 декабря 2018

У меня стандартный проект React, и я использую Google Tag Manager для загрузки аналитики на страницу.У меня есть менеджер тегов Google в главе index.html.У меня есть некоторый код для получения clientId из объекта window.ga, а затем заполнить его в поле в моем состоянии на одном из моих компонентов под названием "gaClientId".У меня есть метод, который получает clientId и вызывается в componentDidMount ().Это работает, как и ожидалось, в Chrome и IE, но не в Firefox по какой-то странной причине.Не совсем уверен, в чем проблема.Я проверил, чтобы убедиться, что firefox не блокирует трекер, и заметил в консоли, что если я console.log (window.ga), то получаю неопределенное сообщение перед загрузкой Google Tag Manager.Не знал, в этом ли проблема.Вот мой метод:

getGAClientId() {
try {
  const tracker = ga.getAll()[0];
  let clientId = tracker.get("clientId");
  this.setState({ gaClientId: clientId });
} catch (e) {
  return null;
}

}

и вот мое состояние в компоненте:

this.state = {
    firstname: '',
    lastname: '',
    email: '',
    gaClientId: ''  
};

Это значение устанавливается в скрытой формеполе, подобное этому:

<input type="hidden" value="this.state.gaClientId" name="gaClientId" />

Вот глава моего index.html, чтобы показать вам:

<head>
<!-- Google Tag Manager -->
<script>
  (function(w, d, s, l, i) {
    w[l] = w[l] || [];
    w[l].push({
      "gtm.start": new Date().getTime(),
      event: "gtm.js"
    });
    var f = d.getElementsByTagName(s)[0],
      j = d.createElement(s),
      dl = l != "dataLayer" ? "&l=" + l : "";
    j.async = true;
    j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
    f.parentNode.insertBefore(j, f);
  })(window, document, "script", "dataLayer", "GTM-xxxxxxx");
</script>
<!-- End Google Tag Manager -->
</head>

Любая помощь в этом приветствуется.Спасибо!

1 Ответ

0 голосов
/ 28 декабря 2018

Разобрался!Мне нужно было добавить setTimeout () к моему вызову getGaClientId () в мой componentDidMount.Я просто обновил код, приведенный ниже, чтобы исправить это.

componentDidMount() {
  setTimeout(() => {
    this.getGAClientId();
  }, 2000);
}

Я предполагаю, что порядок загрузки, когда Google Analytics загружался, когда мой метод вызывался, был отключен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...