这个问题有点老了。但是我搜索了很长时间的答案,然后与 Jan Exner 交谈,他找到了。它有点像脏,但可以工作:) 你可以在 s.doPlugins 中使用脚本作为插件。代码如下:
s.mergeDTMShadowData = function(toolID, overwrite) {
// overwrite defaults to true
if (typeof overwrite === 'undefined' || overwrite === null) {
overwrite = true;
}
// check if DTM is present
if (typeof _satellite !== 'undefined') {
var analyticsTool = _satellite.tool[toolID];
// is the analytics tool enabled?
var enabled = true;
if (analyticsTool.settings.initTool !== undefined && analyticsTool.settings.initTool === false) {
enabled = false;
}
if (enabled === false) {
// copy events
var eventArray = analyticsTool.events;
if (eventArray && eventArray.length > 0) {
for (ev in eventArray) {
s.events = s.apl(s.events, eventArray[ev], ',', 1);
}
}
// copy props & eVars
var varArray = analyticsTool.varBindings;
if (varArray) {
for (variable in varArray) {
if (overwrite || typeof s[variable] === 'undefined' || s[variable] === null) {
s[variable] = varArray[variable];
}
}
}
}
} else {
console.log('DTM not found, bailing out...');
}
}
转成插件直接在DTM中使用,完整的解决方案如下:
s.mergeDTMShadowData=new Function("t","o",""
+"if(typeof o==='undefined'||o===null){o=true;}if(typeof _satellite!="
+"='undefined'){var a=_satellite.tool[t];var e=true;if(a.settings.ini"
+"tTool!==undefined&&a.settings.initTool===false){e=false;}if(e===fal"
+"se){var b=a.events;if(b&&b.length>0){for(c in b){s.events=s.apl(s.e"
+"vents,b[c],',',1);}}var d=a.varBindings;if(d){for(f in d){if(o||typ"
+"eof s[f]==='undefined'||s[f]===null){s[f]=d[f];}}}}}else{console.lo"
+"g('DTM not found, bailing out...');}");
s.doPlugins = (function() {
return function() {
s.mergeDTMShadowData("c7b417741f9f0d2435c6dd064ad9fc12",true);
// now call the orignal
var result = s_doPlugins.apply(this,arguments);
return result;
};
}());
将其放入页面加载规则的第三方/Javascript 部分,您就完成了。无需更改现有的遗留代码!没有任何!
需要更多关于它是如何工作的信息,在博文中获取战利品:
http://webanalyticsfordevelopers.com/2015/11/17/dtm-how-to-amend-an-existing-analytics-setup/
我只是想把它写在这里,以便以后来这里的人找到它。