首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >自定义模板callInWindow

自定义模板callInWindow
EN

Stack Overflow用户
提问于 2019-05-29 22:00:36
回答 2查看 773关注 0票数 1

我正在使用新的自定义模板功能,但我对一般概念仍然相当陌生,我正在寻找关于以下代码的意见,我想从GTM调用一个位于我的应用程序上的全局函数,此代码是否适用于我的自定义标记?

代码语言:javascript
复制
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权限。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-30 12:57:20

我刚经历过这一切。您的语法是正确的,但这并不能保证它会实际运行--这取决于"OBJ“实际在做什么。如果它在某个时刻修改了原型链,代码将不会运行(原因之一是GTM自定义模板实际上在全局对象的副本上运行,而不是在对象本身上运行)。

因此,虽然您的代码很好,但由于sandboxed Javascript的限制,它可能无法运行,在这种情况下,您无能为力。

票数 1
EN

Stack Overflow用户

发布于 2019-05-31 06:38:44

Elke的答案是正确的,因为copyFromWindow应用程序接口对对象进行了深度复制。window应用程序接口将在callInWindow上调用实际的对象,并将其余的参数传递给它。在本例中,您可能希望调用callInWindow,将label作为第二个参数传递,并将详细信息作为第三个参数传递,除非Obj.tracking.add需要一个数组作为参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56362376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档