Google标记管理器自定义模板沙盒Javascript问题
我已经使用google tag manager创建了一个自定义模板,但是我在让沙盒javascript正常工作时遇到了一些困难,我知道脚本是正确注入的,原因如下 日志('Cotaylitcs:脚本加载成功') 输出到控制台。我只是不能调用我的函数。我还包括了JS代码 自定义模板代码(沙盒Javascript) 沙盒Js注入的我的Javascript代码:Google标记管理器自定义模板沙盒Javascript问题,javascript,google-tag-manager,Javascript,Google Tag Manager,我已经使用google tag manager创建了一个自定义模板,但是我在让沙盒javascript正常工作时遇到了一些困难,我知道脚本是正确注入的,原因如下 日志('Cotaylitcs:脚本加载成功') 输出到控制台。我只是不能调用我的函数。我还包括了JS代码 自定义模板代码(沙盒Javascript) 沙盒Js注入的我的Javascript代码: let Cotalytics = function(){ this.init(); }; // Init Cotalytics.p
let Cotalytics = function(){
this.init();
};
// Init
Cotalytics.prototype =
{
init: function () {
var cotalytics = this;
// Argument Assignment
//cotalytics.endpoint = 'https://localhost:44301/api/events/',
//cotalytics.async = true,
//cotalytics.debug = true,
//cotalytics.events = {}
//creat cookie here
return cotalytics;
},
// Add Interaction Object Triggered By Events to Records Array
addEvent: function (eventType, data, cottageCode, brandid) {
data = data || {};
cottageCode = cottageCode || null;
data.Browser = window.navigator.appVersion;
var cotalytics = this;
// cotalytics Object
cotalytics.events = {
timestamp : new Date(),
cottagecode : cottageCode,
type : eventType,
ipaddress : "127.0.0.1",
requesturl : window.location.href,
sessionid : "1234567",
brandid : brandid,
eventData : Object.keys(data).map(function(key) { return {"key": key, "value": data[key]}})
};
// Log Interaction if Debugging
//cotalytics.logEvents();
//console.log("Session:\n", interactor.interaction);
//var data =JSON.stringify(interactor)
console.log("JSON:\n", JSON.stringify(cotalytics));
return cotalytics;
},
// Gather Additional Data and Send Interaction(s) to Server
logEvents: function () {
var cotalytics = this,
// Initialize Cross Header Request
xhr = new XMLHttpRequest();
// Post Session Data Serialized as JSON
xhr.open('POST', 'https://localhost:44301/api/events/', true);
xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
var data = JSON.stringify(cotalytics.events);
xhr.send(data);
return cotalytics;
}
};
window.cotalytics = new Cotalytics();
好吧,看起来你大部分时间都在那里,但有一些事情不太对劲
{key:value}
。虽然该值将填充常量,但键不会被替换。我在想象这些将是动态变量,那么为什么你没有这样的东西:callInWindow('cotalytics.addEvent','testing12',{key:value},“{DL-cottageCode}”)代码>
它看起来像一个数据层变量,那么为什么不使用copyFromDataLayer API并尝试一下呢
const copyFromDataLayer = require('copyFromDataLayer');
const cottageCode = copyFromDataLayer('cottageCode');
logEvents callInWindowcallInWindow('cotalytics.logEvents()')
不需要括号,它只是callInWindow('cotalytics.logEvents')代码>
我得到的最终代码是:
const log = require('logToConsole');
const injectScript = require('injectScript');
const callInWindow = require('callInWindow');
const makeTableMap = require('makeTableMap');
const copyFromDataLayer = require('copyFromDataLayer');
const cottageCode = copyFromDataLayer('cottageCode');
//Create the Key Value Pair
const kvp = {};
const key = "testing";
const value = "test2";
kvp[key]=value;
const url = "https://api.deve/cotalytics/cotalytics.js";
// If the script loaded successfully, log a message and signal success
const onSuccess = () => {
log('Cotaylitcs: Script loaded successfully.');
callInWindow('cotalytics.addEvent',"testing12" ,kvp,cottageCode);
callInWindow('cotalytics.logEvents');
data.gtmOnSuccess();
};
// If the script fails to load, log a message and signal failure
const onFailure = () => {
log('Cotaylitcs: Script load failed.');
data.gtmOnFailure();
};
injectScript(url, onSuccess, onFailure, 'cotalytics');
希望这会有所帮助,如果你还有其他问题,请提问 我现在已经设法解决了这个问题。我仍在使用自定义模板,但我需要添加一个新的自定义HTML标记,将我的.JS脚本注入所有页面。完成此操作后,我的自定义模板标记工作了。谢谢James,它工作了一段时间,但现在我仍在启动的标记上运行。我猜这是作为标记,而不是在模板生成器中?仍然运行通常意味着onSuccess/Failure事件还没有触发,因此标签可能挂在某个地方。当标记触发时,检查network选项卡,查看正在进行的调用,并将一些控制台日志放回,查看代码到达的位置。或者,如果你共享站点链接和容器预览,我很乐意看一看。xhr.open('POST','',true)//xhr.open('POST','',true);这可能会导致问题,并且肯定会阻止我进行测试,但是我看不到事件触发。你能在控制台中为你调用的所有变量设置一个成功日志吗?沙盒JS-//如果脚本加载成功,记录一条消息并发出success const onSuccess=()=>{log('Cotaylitcs:script loaded successfully');log('Cotaylitcs:KVP');log(KVP);log('Cotaylitcs:cottagecode');log(cottagecode);log('Cotaylitcs:apikey');log(apikey);callInWindow('cotalytics.addEvent','testing12',kvp,cottageCode);log('Cotaylitcs:Passed ad event');callInWindow('cotalytics.logEvents',apikey);log('Cotaylitcs:Passed log event');data.gtmOnSuccess();}代码>
const copyFromDataLayer = require('copyFromDataLayer');
const cottageCode = copyFromDataLayer('cottageCode');
const log = require('logToConsole');
const injectScript = require('injectScript');
const callInWindow = require('callInWindow');
const makeTableMap = require('makeTableMap');
const copyFromDataLayer = require('copyFromDataLayer');
const cottageCode = copyFromDataLayer('cottageCode');
//Create the Key Value Pair
const kvp = {};
const key = "testing";
const value = "test2";
kvp[key]=value;
const url = "https://api.deve/cotalytics/cotalytics.js";
// If the script loaded successfully, log a message and signal success
const onSuccess = () => {
log('Cotaylitcs: Script loaded successfully.');
callInWindow('cotalytics.addEvent',"testing12" ,kvp,cottageCode);
callInWindow('cotalytics.logEvents');
data.gtmOnSuccess();
};
// If the script fails to load, log a message and signal failure
const onFailure = () => {
log('Cotaylitcs: Script load failed.');
data.gtmOnFailure();
};
injectScript(url, onSuccess, onFailure, 'cotalytics');