我正在尝试创建自定义 GTM 模板来加载外部脚本。它大部分工作正常并正确加载库(Segment 的analytics.js)。
Segment提供了一个analytics.ready()回调,但我不知道如何在GTM模板沙箱中将一些东西包装到其中。我怀疑分析还没有准备好,因为 GTM 异步加载其沙盒内容。
这是我的代码的相关部分。问题是analytics.page()永远不会触发。
我也尝试过不使用analytics.ready()包装器,但是当我这样做时它也无法触发。
// Define load function
analytics.load = function(key, options) {
if (!queryPermission('inject_script', 'https://cdn.segment.com/analytics.js/v1/' + key + '/analytics.min.js')) {
data.gtmOnFailure();
return;
}
var scriptUrl = 'https://cdn.segment.com/analytics.js/v1/' + key + '/analytics.min.js';
injectScript(scriptUrl, function() {
analytics.ready(function() {
if (data.sendPage) {
log('sending page from analytics.ready');
analytics.page();
}
});
data.gtmOnSuccess();
}, data.gtmOnFailure);
};
// Set properties and load
analytics._writeKey = writeKey;
analytics.SNIPPET_VERSION = '5.2.0';
analytics.load(writeKey);
(是的,我知道在 GTM 中加载 Segment 的 JS 并不总是正确的方法,在这种情况下这是必要的。)