自定义模板 callInWindow
Custom templates 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
权限。
谢谢!
我刚刚经历过这个。您的语法是正确的,但这并不能保证这实际上 运行 - 这取决于 "OBJ" 实际在做什么。如果它在某个时候修改原型链,代码将不会 运行(原因之一是 GTM 自定义模板实际上 运行 在全局对象的副本上,而不是对象本身)。
因此,虽然您的代码很好,但由于 sandboxed Javascript 的限制,它可能不会 运行,在这种情况下您无能为力。
Elke 的回答是正确的,因为 copyFromWindow api 对对象进行了深度复制。 callInWindow api 将调用 window 上的实际对象,并将其余参数传递给它。在您的情况下,您可能希望调用 callInWindow 将标签作为第二个参数传递,将详细信息作为第三个参数传递,除非 Obj.tracking.add 需要数组作为参数。
我正在使用新的自定义模板功能,但我对一般概念还是很陌生,我正在寻找对以下代码的意见,我想从 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
权限。
谢谢!
我刚刚经历过这个。您的语法是正确的,但这并不能保证这实际上 运行 - 这取决于 "OBJ" 实际在做什么。如果它在某个时候修改原型链,代码将不会 运行(原因之一是 GTM 自定义模板实际上 运行 在全局对象的副本上,而不是对象本身)。
因此,虽然您的代码很好,但由于 sandboxed Javascript 的限制,它可能不会 运行,在这种情况下您无能为力。
Elke 的回答是正确的,因为 copyFromWindow api 对对象进行了深度复制。 callInWindow api 将调用 window 上的实际对象,并将其余参数传递给它。在您的情况下,您可能希望调用 callInWindow 将标签作为第二个参数传递,将详细信息作为第三个参数传递,除非 Obj.tracking.add 需要数组作为参数。