ec.js 可以用服务器端 gtm 代理吗?
Can ec.js be proxied with server side gtm?
想知道是否只有 gtm.js 和 analytics.js 可以通过 gtm 服务器代理?在 google 文档中找不到关于此的任何信息。此外,在尝试使用服务器端 gtm.
获取它时出现错误 404
服务器端 GTM 不像普通 GTM 那样代理 js。主要用于代理网络请求。
如果您想知道它是否可以发送增强型电子商务事件,那么是的,它可以。
如果您想知道它是否可以在网站上部署任何东西(包括任何 js 文件),那么不,它不能。它根本不会以任何方式出现在前端。它可以代理文件,但所做的只是重写您仍然必须包含在 DOM.
中的端点
使用前端GTM在前端部署任何东西。
有一个错误,其中 plugins/ua/ec.js 将通过 https://your.domain/plugins/ua/ec.js
获取
发生这种情况时,您必须选择该客户端请求并手动 return 脚本(通过在服务器端容器中编写客户端模板)。
找到了一个带有代码示例的回购协议,它缩短了我本来可以使用的时间。
信用:https://gist.github.com/mbaersch/e94e2499ea5bb761bf81878d815fd890#file-fix-ecjs-client-tpl
重点来了:
const setResponseBody = require('setResponseBody');
const setResponseHeader = require('setResponseHeader');
const setResponseStatus = require('setResponseStatus');
const sendHttpGet = require('sendHttpGet');
const templateDataStorage = require('templateDataStorage');
const returnResponse = require('returnResponse');
const key = "ec.js";
if (require('getRequestPath')() === '/plugins/ua/ec.js') {
require('claimRequest')();
setResponseHeader('content-type', 'application/javascript');
const cachedBody = templateDataStorage.getItemCopy(key);
if (cachedBody) {
setResponseBody(cachedBody);
setResponseStatus(200);
returnResponse();
} else {
sendHttpGet('https://www.google-analytics.com/plugins/ua/ec.js', (statusCode, headers, body) => {
templateDataStorage.setItemCopy(key, body);
setResponseBody(body);
setResponseStatus(statusCode);
returnResponse();
});
}
}
Stape.io 有一个文件代理客户端 https://github.com/stape-io/file-proxy-client 因此您可以轻松地通过服务器端 GTM 容器代理任何文件。
它与上一个答案中描述的内容基本相同,但更通用且易于使用。
想知道是否只有 gtm.js 和 analytics.js 可以通过 gtm 服务器代理?在 google 文档中找不到关于此的任何信息。此外,在尝试使用服务器端 gtm.
获取它时出现错误 404服务器端 GTM 不像普通 GTM 那样代理 js。主要用于代理网络请求。
如果您想知道它是否可以发送增强型电子商务事件,那么是的,它可以。
如果您想知道它是否可以在网站上部署任何东西(包括任何 js 文件),那么不,它不能。它根本不会以任何方式出现在前端。它可以代理文件,但所做的只是重写您仍然必须包含在 DOM.
中的端点使用前端GTM在前端部署任何东西。
有一个错误,其中 plugins/ua/ec.js 将通过 https://your.domain/plugins/ua/ec.js
获取发生这种情况时,您必须选择该客户端请求并手动 return 脚本(通过在服务器端容器中编写客户端模板)。
找到了一个带有代码示例的回购协议,它缩短了我本来可以使用的时间。 信用:https://gist.github.com/mbaersch/e94e2499ea5bb761bf81878d815fd890#file-fix-ecjs-client-tpl 重点来了:
const setResponseBody = require('setResponseBody');
const setResponseHeader = require('setResponseHeader');
const setResponseStatus = require('setResponseStatus');
const sendHttpGet = require('sendHttpGet');
const templateDataStorage = require('templateDataStorage');
const returnResponse = require('returnResponse');
const key = "ec.js";
if (require('getRequestPath')() === '/plugins/ua/ec.js') {
require('claimRequest')();
setResponseHeader('content-type', 'application/javascript');
const cachedBody = templateDataStorage.getItemCopy(key);
if (cachedBody) {
setResponseBody(cachedBody);
setResponseStatus(200);
returnResponse();
} else {
sendHttpGet('https://www.google-analytics.com/plugins/ua/ec.js', (statusCode, headers, body) => {
templateDataStorage.setItemCopy(key, body);
setResponseBody(body);
setResponseStatus(statusCode);
returnResponse();
});
}
}
Stape.io 有一个文件代理客户端 https://github.com/stape-io/file-proxy-client 因此您可以轻松地通过服务器端 GTM 容器代理任何文件。
它与上一个答案中描述的内容基本相同,但更通用且易于使用。