我正在使用新的自定义模板功能,但我对一般概念仍然相当陌生,我正在寻找关于以下代码的意见,我想从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
权限。谢谢!
发布于 2019-05-30 12:57:20
我刚经历过这一切。您的语法是正确的,但这并不能保证它会实际运行--这取决于"OBJ“实际在做什么。如果它在某个时刻修改了原型链,代码将不会运行(原因之一是GTM自定义模板实际上在全局对象的副本上运行,而不是在对象本身上运行)。
因此,虽然您的代码很好,但由于sandboxed Javascript的限制,它可能无法运行,在这种情况下,您无能为力。
发布于 2019-05-31 06:38:44
Elke的答案是正确的,因为copyFromWindow应用程序接口对对象进行了深度复制。window应用程序接口将在callInWindow上调用实际的对象,并将其余的参数传递给它。在本例中,您可能希望调用callInWindow,将label作为第二个参数传递,并将详细信息作为第三个参数传递,除非Obj.tracking.add需要一个数组作为参数。
https://stackoverflow.com/questions/56362376
复制相似问题