From f71de559951a85ab92a33cfa0f4e2e9997bb7f4d Mon Sep 17 00:00:00 2001 From: shrouti Date: Tue, 18 Jan 2022 16:59:36 +0530 Subject: [PATCH 1/2] initial commit: adding server side support to GTM --- integrations/GoogleTagManager/browser.js | 24 +++++++++++++++++++++++- integrations/GoogleTagManager/utils.js | 24 ++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 integrations/GoogleTagManager/utils.js diff --git a/integrations/GoogleTagManager/browser.js b/integrations/GoogleTagManager/browser.js index 333ca910fa..1ab756b1a1 100644 --- a/integrations/GoogleTagManager/browser.js +++ b/integrations/GoogleTagManager/browser.js @@ -1,13 +1,27 @@ import logger from "../../utils/logUtil"; +import { ServerSideScriptLoader } from "./utils"; class GoogleTagManager { constructor(config) { this.containerID = config.containerID; this.name = "GOOGLETAGMANAGER"; + this.sendServerSide = config.sendServerSide; + this.serverUrl = config.serverUrl; } init() { logger.debug("===in init GoogleTagManager==="); + + const defaultUrl = `https://www.googletagmanager.com`; + + // ref: https://developers.google.com/tag-platform/tag-manager/server-side/send-data#update_the_gtmjs_source_domain + + if (this.sendServerSide && this.serverUrl) { + window.finalUrl = this.serverUrl; + } else { + window.finalUrl = defaultUrl; + } + (function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ "gtm.start": new Date().getTime(), event: "gtm.js" }); @@ -15,9 +29,17 @@ class GoogleTagManager { const j = d.createElement(s); const dl = l !== "dataLayer" ? `&l=${l}` : ""; j.async = true; - j.src = `https://www.googletagmanager.com/gtm.js?id=${i}${dl}`; + j.src = `${window.finalUrl}/gtm.js?id=${i}${dl}`; f.parentNode.insertBefore(j, f); })(window, document, "script", "dataLayer", this.containerID); + + if (this.sendServerSide) { + // when user opts for server side + ServerSideScriptLoader( + "Tag Manager Server Side", + `${window.finalUrl}/ns.html?id=${this.containerID}/` + ); + } } identify(rudderElement) { diff --git a/integrations/GoogleTagManager/utils.js b/integrations/GoogleTagManager/utils.js new file mode 100644 index 0000000000..98eadc0f57 --- /dev/null +++ b/integrations/GoogleTagManager/utils.js @@ -0,0 +1,24 @@ +import logger from "../../utils/logUtil"; + +const ServerSideScriptLoader = (id, src) => { + logger.debug(`in server script loader=== ${id}`); + // const js = document.createElement("iframe"); + // js.src = src; + // js.height = "0"; + // js.width = "0"; + // js.style = "display:none;visibility:hidden"; + // const e = document.getElementsByTagName("body")[0]; + // logger.debug("==parent script==", e); + // logger.debug("==adding script==", js); + // const noscript = document.createElement("noscript"); + // noscript.appendChild(js); + const body = document.getElementsByTagName("body")[0]; + // body.insertBefore(noscript, body.firstChild); + // e.getElementsByTagName("noscript")[0].appendChild(js); + body.innerHTML += ''; + // console.log(document.getElementsByTagName("body"))"; +}; + +export { ServerSideScriptLoader }; From 19227b4d99f0cd113f17eb780bb0b48e796250c2 Mon Sep 17 00:00:00 2001 From: shrouti Date: Tue, 18 Jan 2022 20:08:25 +0530 Subject: [PATCH 2/2] deleted additonal scriptloader and boolean variable support --- integrations/GoogleTagManager/browser.js | 16 +--------------- integrations/GoogleTagManager/utils.js | 24 ------------------------ 2 files changed, 1 insertion(+), 39 deletions(-) delete mode 100644 integrations/GoogleTagManager/utils.js diff --git a/integrations/GoogleTagManager/browser.js b/integrations/GoogleTagManager/browser.js index 1ab756b1a1..1d25c2acba 100644 --- a/integrations/GoogleTagManager/browser.js +++ b/integrations/GoogleTagManager/browser.js @@ -1,11 +1,9 @@ import logger from "../../utils/logUtil"; -import { ServerSideScriptLoader } from "./utils"; class GoogleTagManager { constructor(config) { this.containerID = config.containerID; this.name = "GOOGLETAGMANAGER"; - this.sendServerSide = config.sendServerSide; this.serverUrl = config.serverUrl; } @@ -16,11 +14,7 @@ class GoogleTagManager { // ref: https://developers.google.com/tag-platform/tag-manager/server-side/send-data#update_the_gtmjs_source_domain - if (this.sendServerSide && this.serverUrl) { - window.finalUrl = this.serverUrl; - } else { - window.finalUrl = defaultUrl; - } + window.finalUrl = this.serverUrl ? this.serverUrl : defaultUrl; (function (w, d, s, l, i) { w[l] = w[l] || []; @@ -32,14 +26,6 @@ class GoogleTagManager { j.src = `${window.finalUrl}/gtm.js?id=${i}${dl}`; f.parentNode.insertBefore(j, f); })(window, document, "script", "dataLayer", this.containerID); - - if (this.sendServerSide) { - // when user opts for server side - ServerSideScriptLoader( - "Tag Manager Server Side", - `${window.finalUrl}/ns.html?id=${this.containerID}/` - ); - } } identify(rudderElement) { diff --git a/integrations/GoogleTagManager/utils.js b/integrations/GoogleTagManager/utils.js deleted file mode 100644 index 98eadc0f57..0000000000 --- a/integrations/GoogleTagManager/utils.js +++ /dev/null @@ -1,24 +0,0 @@ -import logger from "../../utils/logUtil"; - -const ServerSideScriptLoader = (id, src) => { - logger.debug(`in server script loader=== ${id}`); - // const js = document.createElement("iframe"); - // js.src = src; - // js.height = "0"; - // js.width = "0"; - // js.style = "display:none;visibility:hidden"; - // const e = document.getElementsByTagName("body")[0]; - // logger.debug("==parent script==", e); - // logger.debug("==adding script==", js); - // const noscript = document.createElement("noscript"); - // noscript.appendChild(js); - const body = document.getElementsByTagName("body")[0]; - // body.insertBefore(noscript, body.firstChild); - // e.getElementsByTagName("noscript")[0].appendChild(js); - body.innerHTML += ''; - // console.log(document.getElementsByTagName("body"))"; -}; - -export { ServerSideScriptLoader };