我正在为Google开发一个简单的自定义标记模板。它应该绑定到某些事件,并在POST请求正文中以JSON的形式将事件数据发送到我们的服务器。
沙箱化的GTM Javascript运行时提供sendPixel() API。但是,这只提供GET请求。
如何从这个沙箱运行时内发送POST请求?
发布于 2020-03-25 00:40:07
您可以使用在这里找到的injectScript和copyFromWindow API的组合( 自定义模板API )。
基本上工作流程是这样的。
上面包含的脚本还包括JSON和Base64编码函数,您可以通过copyWindow api以同样的方式使用它们。
我希望这能帮上忙。如果您需要一些有关部件的特定代码示例,我可以帮助您。
发布于 2020-06-22 05:52:20
根据伊恩·米切尔的回答--我也做过类似的解决方案。
这是GTM模板代码部分中可以在以下场景中使用的基本代码模式:
const injectScript = require('injectScript');
const callInWindow = require('callInWindow');
const log = require('logToConsole');
const queryPermission = require('queryPermission');
const postScriptUrl = 'https://myPostScriptUrl'; //provide your script url
const endpoint = 'https://myEndpoint'; //provide your endpoint url
//provide your data; data object contains all properties from fields tab of the GTM template
const data = {
sessionId: data.sessionId,
name: data.name,
description: data.description
};
//add appropriate permission to inject script from 'https://myPostScriptUrl' url in GTM template's privileges tab
if (queryPermission('inject_script', postScriptUrl)) {
injectScript(postScriptUrl, onSuccess, data.gtmOnFailure, postScriptUrl);
} else {
log('postScriptUrl: Script load failed due to permissions mismatch.');
data.gtmOnFailure();
}
function onSuccess() {
//add appropriate permission to call `sendData` variable in GTM template's privileges tab
callInWindow('sendData', gtmData, endpoint);
data.gtmOnSuccess();
}重要的是要记住在GTM模板中添加所有必要的私有信息。在使用代码部分中的相关选项后,适当的权限将自动显示在privillages选项卡中。
您在“https://myPostScriptUrl”的脚本可能如下所示:
function sendData(data, endpoint) {
var xhr = new XMLHttpRequest();
var stringifiedData = JSON.stringify(data);
xhr.open('POST', endpoint);
xhr.setRequestHeader('Content-type', 'application/json');
xhr.send(stringifiedData);
xhr.onload = function () {
if (xhr.status.toString()[0] !== '2') {
console.error(xhr.status + '> ' + xhr.statusText);
}
};
}发布于 2021-10-05 10:30:45
加载外部脚本并不是绝对必要的。虽然仍然是一个解决办法,但您还可以通过"JavaScript变量“类型变量将一个提取引用传递到标记中:
我在https://hume.dev/articles/post-request-custom-template/用截图记下了这个
https://stackoverflow.com/questions/58825052
复制相似问题