Я использую новую функцию пользовательского шаблона, но я все еще довольно плохо знаком с общей концепцией, и я искал мнения о следующем коде, я хочу вызвать глобальную функцию, которая находится в моем приложении из 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
только разрешения.
Спасибо!
@EikePierstorff Спасибо, что рассмотрели это спустя столько времени, я исправил опечатку, чтобы этот вопрос мог быть более полезным для других людей.
Я только что прошел через это. Ваш синтаксис правильный, но это не гарантирует, что это действительно будет работать - это зависит от того, что на самом деле делает «OBJ». Если он изменит цепочку прототипов в какой-то момент, код не будет работать (одна из причин заключается в том, что пользовательские шаблоны GTM фактически выполняются на копии глобального объекта, а не на самом объекте).
Итак, пока ваш код в порядке, но он может не запуститься из-за ограничений Javascript в песочнице, и в этом случае вы ничего не можете сделать.
Понял, спасибо за разъяснение и предупреждение.
Ответ Эльке верен в том смысле, что API-интерфейс copyFromWindow выполняет глубокую копию объектов. API callInWindow вызовет фактический объект в окне, передав ему остальные аргументы. В вашем случае вы, вероятно, захотите вызвать callInWindow, передав метку в качестве второго аргумента и детали в качестве третьего, если только Obj.tracking.add не ожидает массив в качестве аргумента.
Глядя на это год спустя, я снова вижу, что в коде есть опечатка («выполнить» вместо «выполнить»), так что это в любом случае не запустилось бы.