Пользовательские шаблоны callInWindow

Я использую новую функцию пользовательского шаблона, но я все еще довольно плохо знаком с общей концепцией, и я искал мнения о следующем коде, я хочу вызвать глобальную функцию, которая находится в моем приложении из GTM, будет ли этот код работать для моего пользовательский тег?

const log = require('logToConsole'); // Console api
const query = require('queryPermission'); // Query api
const callInWindow = require('callInWindow'); // Call function in window api

if (query('access_globals', 'execute', 'OBJ.tracking.add')) { // Trying to access the method
    log('data =', data); // USE ONLY IN DEBUG
    callInWindow( 'OBJ.tracking.add' , [data.tagLabel, data.tagDetail]); // Send event
    data.gtmOnSuccess();
}
else {
  data.gtmOnFailure();
} 

Где OBJ.tracking.add имеет execute только разрешения. Спасибо!

Глядя на это год спустя, я снова вижу, что в коде есть опечатка («выполнить» вместо «выполнить»), так что это в любом случае не запустилось бы.

Eike Pierstorff 21.08.2020 12:08

@EikePierstorff Спасибо, что рассмотрели это спустя столько времени, я исправил опечатку, чтобы этот вопрос мог быть более полезным для других людей.

F. Leone 21.08.2020 12:37
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
1
2
905
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я только что прошел через это. Ваш синтаксис правильный, но это не гарантирует, что это действительно будет работать - это зависит от того, что на самом деле делает «OBJ». Если он изменит цепочку прототипов в какой-то момент, код не будет работать (одна из причин заключается в том, что пользовательские шаблоны GTM фактически выполняются на копии глобального объекта, а не на самом объекте).

Итак, пока ваш код в порядке, но он может не запуститься из-за ограничений Javascript в песочнице, и в этом случае вы ничего не можете сделать.

Понял, спасибо за разъяснение и предупреждение.

F. Leone 30.05.2019 10:33

Ответ Эльке верен в том смысле, что API-интерфейс copyFromWindow выполняет глубокую копию объектов. API callInWindow вызовет фактический объект в окне, передав ему остальные аргументы. В вашем случае вы, вероятно, захотите вызвать callInWindow, передав метку в качестве второго аргумента и детали в качестве третьего, если только Obj.tracking.add не ожидает массив в качестве аргумента.

Другие вопросы по теме