Analytics
1.3K Usuários online agora
1.3K Usuários online agora
Faça perguntas sobre relatórios personalizados do Google Analytics, o uso da API e do Google Tag Manager e outros recursos avançados
Guie-me
star_border
Responder

Erro de lógica dentro de gtm.js ao utilizar dois ou mais containers na mesma variável document / janela window

[ Editado ]
Calouro ✭

Olá,

 

Cenário:

Em um determinado cenário, eu preciso utilizar dois containers GTM diferentes dentro de uma mesma tela (window).

Isso se dá pois um container possui as tags, normais de um cliente (gerenciadas pelo cliente apenas) para mensurar seus canais de acompanhamento de métricas, e noutro tags da plataforma (gerenciadas por mim apenas), onde há tags para métricas relacionadas exclusivamente sobre a plataforma - o qual este mesmo container está em várias páginas pois ele é comum para todos os clientes da plataforma.

 

Segue o problema:

O problema é que, o gtm.js, na parte onde o trigger de eventos é realizado, ele utiliza em algumas partes a variável document  para definir se algo já foi executado ou não, ao invés de acompanhar uma variável virtual com especificação para qual container foi validado a determinada ação do código.

 

Vou deixar um exemplo abaixo:

Container A)

- Tag com Trigger para acompanhar History Change.

- Lógica dentro do código gtm.js: Ao carregar, verifica se na variável document já existe um atributo com nome "gtmHasHistoryListenerTag" com valor boolean "true". Caso não existe, ele adiciona com valor boolean "true" e continua o a execução do código, trigando o evento History Change.

 

Container B)

- Tag com Trigger para acompanhar History Change.

- Lógica dentro do código gtm.js: Ao carregar, verifica se na variável document  já existe um atributo com nome "gtmHasHistoryListenerTag" com valor boolean "true". Como no container A ele já adicionou este atributo na variável document , para este e qualquer outro container na página, ele nunca vai trigar o evento de History Change.

 

E o problema maior é que, de acordo com a latência, ou outros fatores que influenciam no carregamento do conteúdo da requisição para o gtm.js, a ordem de execução entre Container A e Container B podem mudar, onde causa a situação que em momentos, Container A possui trigger em History Change, e noutro momento, o Container B apenas.

 

Estou anexando imagem para exemplificar a parte do código em que me refiro.

Imagino que mais problemas como este podem existir caso seja validado sempre o valor em variável document ao invés de usar por exemplo uma variável controlada por javascript, aplicando-se para qualquer um dos possíveis containers que estejam dentro da página.

 

Pergunta: Será que esse tópico pode chegar aos desenvolvedores responsáveis dentro do Google, para que seja melhorado essa parte e nos dar possibilidade de usarmos mais tranquilamente mais de um container dentro de uma mesma página?

 

anexo-bug-gtm.jpg

 

Especialistas responderamverified_user

Re: Erro de lógica dentro de gtm.js ao utilizar dois ou mais containers na mesma variável document / janela window

Principal Colaborador

@Jefferson R, tudo bem?

 

Não sei se trata exatamente de um erro, pois o GTM realmente trabalha de forma assíncrona o que causa essa característica no carregamento. Por isso não vejo como um problema da ferramenta e sim uma caraterística. 

 

Eu entendi os motivos pelo qual você usa 2 contêiner´s mais eu usaria apenas um e trabalharia com a sequencia de disparos em nível de tags assim evitaria o problema que esta ocorrendo. Para isso claro que você precisa ter uma acordo com o cliente para não virar uma "salada" o seu contêiner e manter apenas sua empresa como responsável pela gestão de tags. 

 

Enfim, não vejo como um problema mesmo e sim como uma característica que é até mesmo compartilhar por outros gerenciadores de tags como DTM da Adobe que é pago e outros do mercado como Signal e etc. 

 

 

Ricardo Gaya

Re: Erro de lógica dentro de gtm.js ao utilizar dois ou mais containers na mesma variável document / janela window

Calouro ✭

Olá Ricardo, o problema não é a característica de carregamento. Isso é complemente claro. Mas sim a lógica em sí, que não é uma característica, e sim uma falha de construção. Uma vez que eles indicam que pode usar 2 containers numa mesma tela, o código deveria suportar.

Senão, deveria estar claro dentro da documentação que "não deve-se usar mais de 1 container numa única página". Pelo contrário, indica que pode, com ressalva que pode haver alguns efeitos colaterais, sem indicar quais efeitos.

 

Dentro do efeito colateral, indico que é na verdade - para este item - uma falha da engenharia utilizada na construção do código da ferramenta - gtm.js, que pode ser concertada.

 

O problema dos dois containers é que, hoje como comentei, tenho 1 container que possui uma tag controlada para todos os X domains que usam a ferramenta. E cada domain possui o seu container Y específico. Se eu tiver que tratar com cada cliente a alteração(mais de 100), imagina uma manutenção nas minhas tags do container GTM do cliente... Eu teria que ir em cada um dos containers do cliente e alterar as minhas tags. Ou ainda, em container de Cliente onde o acesso de edição é restrito, e não tenho possibilidade de publicar o container dele... Isso tornaria um problema burocrático enorme.

 

No momento, só me resta a ter que usar outra ferramenta que não seja o GTM para este caso. Ou vou precisar gerar um middleware capaz de, após carregar 1 container, ele remova o valor da variável que comentei no primeiro post, e após isso, chame a URL do segundo container (legítimo gato preto no escuro rs).

Re: Erro de lógica dentro de gtm.js ao utilizar dois ou mais containers na mesma variável document / janela window

Principal Colaborador

jeff_drumgod escreveu:

Uma vez que eles indicam que pode usar 2 containers numa mesma tela, o código deveria suportar.

Senão, deveria estar claro dentro da documentação que "não deve-se usar mais de 1 container numa única página". Pelo contrário, indica que pode, com ressalva que pode haver alguns efeitos colaterais, sem indicar quais efeitos.

 

 

 


Eu concordo totalmente com você - o código deveria funcionar com tranquilidade ao instalar 2 containers na mesma página. O que você descreve certamente é um bug no core da funcionalidade de History do GTM - provavelmente algum desenvolvedor não testou adequadamente o History no caso de uso de 2 containers na mesma página, senão teria visto o problema da propriedade do Document.

 

Sim, é possível alcançar os desenvolvedores lá, minha recomendação é que use os canais de suporte do AdWords para reportar a falha, de preferência escreva a descrição em inglês indicando passos que alguém facilmente consiga simular o problema - você pode também criar uma conta GTM de teste e instalar em uma página pública, informando no bug report o número das contas e página pública de teste para facilitar eles simularem o problema.

 

Se não conseguir reportar a falha por estes canais nos avise e tentamos alcançar algum desenvolvedor - mas aviso que dependendo da prioridade que eles derem para esta falha perante outras, talvez demore alguns meses ou até nunca seja resolvido o problema - assim considere arriscar as suas soluções alternativas se a questão for de prioridade para você.

 

 

___

"Você não precisa de uma empresa de 100 funcionários para desenvolver aquela ideia" ~Larry Page