Аналитика Google: dataLayer.pu sh не работает с массивом переменных? - PullRequest
2 голосов
/ 25 февраля 2020

Интересно, почему gtag. js не работает, когда pu sh в массив переменных dataLayer вместо 'arguments'? Вот пример кода:

window.dataLayer = window.dataLayer || []

function gtag(first: any, second: any) {
    window.dataLayer.push([first, second])
}

gtag('js', new Date())
gtag('config', trackingCode)

Это работает, только когда я заменяю '[first, second]' на 'arguments'

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Итак, в конце эта версия кода работает нормально для меня, без ошибок линтера:

window.dataLayer = window.dataLayer || []

function gtag(..._args: unknown[]) {
    window.dataLayer.push(arguments)
}

gtag('js', new Date())
gtag('config', trackingCode)
1 голос
/ 26 февраля 2020

Мы не знаем, чего вы хотите добиться, переписав функцию gtag, поэтому мы не можем ответить на конкретный c вопрос о том, что "works", а что нет.

Что можно сказать: arguments является объектом , а GTM ожидает объект от dataLayer.push, следовательно, почему это следует предполагаемому замыслу (тогда как [first, second] является массивом и, следовательно, нет).

Обратите внимание, что сам по себе вызов push "работает" : enter image description here

Однако вы не сможете прочитать эти данные через GTM , который, как объяснено выше, ожидает .push для передачи объектов.

Если вы хотите использовать dataLayer в совершенно бесплатно , вы можете использовать помощник GTM dataLayer:
https://github.com/google/data-layer-helper

Это поддерживает синтаксис массива с помощью мета-команд :

dataLayer.push(['abc.push', 4, 5, 6]);

Однако GTM по умолчанию не поддерживает чтение этих данных (еще раз GTM ожидает объект, поэтому он может извлекать значения на основе объекта prop нужды), поэтому для чтения этих данных через GTM вам потребуется использовать помощник dataLayer внутри тегов и переменных GTM.

...