Пользовательские шаблоны callInWindow - PullRequest
0 голосов
/ 29 мая 2019

Я использую новую функцию пользовательского шаблона, но я все еще довольно плохо знаком с общей концепцией, и я искал мнения по поводу следующего кода, я хочу вызвать глобальную функцию, которая находится в моем приложении из 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', 'excute', '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 только разрешения.Спасибо!

Ответы [ 2 ]

1 голос
/ 30 мая 2019

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

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

0 голосов
/ 31 мая 2019

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

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