Отдел маркетинга хочет разделить Диспетчер тегов Google по странам. Для обычного веб-сайта, а не SPA, мы можем легко сделать это на основе URL-адреса. Переключится ли клиент на другой URL-адрес, тогда страница будет обновлена, код страны будет добавлен в URL-адрес, и можно будет загрузить правильный GTM.
Теперь для SPA (в Angular, Typescript) это немного сложнее. В настоящее время у нас нет параметра языка / страны в этом приложении, но его можно изменить в любом случае во всем веб-приложении. Конечно, страница не обновлялась.
Я пытаюсь найти способ динамически загружать и выгружать скрипт GTM.
Я могу успешно загружать и выгружать элемент <script> в <head>, но менеджер тегов добавляет больше элементов.
public loadScriptSimple(country : string) {
//first remove existing node
var existing = document.getElementById("tagmanager");
if (existing && existing.parentNode) {
existing.parentNode.removeChild(existing);
}
//
console.info('adding node to head...');
let node = document.createElement('script');
if (country === "NL") {
node.textContent =
"(function (w, d, s, l, i) {w[l] = w[l] ....(window, document, 'script', 'dataLayer', 'GTM-XXX');";
} else {//todo for later loading others
node.textContent =
"(function (w, d, s, l, i) {w[l] = w[l] ....(window, document, 'script', 'dataLayer', 'GTM-YYY');";
}
node.type = 'text/javascript';
node.async = true;
node.charset = 'utf-8';
node.setAttribute("id", "tagmanager");
document.getElementsByTagName('head')[0].appendChild(node);
console.info('loaded script');
}
Источник: https://stackoverflow.com/a/38473334/2901207
Таким образом, можно было бы загрузить его при первом запросе (например, при первом выборе страны на основе IP-адреса), но после изменения страны будут загружены два тега.
Есть ли простой способ удалить существующие элементы, а затем создать новые, как указано выше?
Нет, я позвонил по этому поводу и сказал отделу маркетинга, что это невозможно. Единственный способ, которым это было бы возможно, - это вручную загрузить скрипты для конкретной страны. Только тогда можно удалить узел по имени или идентификатору.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы когда-нибудь находили решение проблемы удаления дополнительных элементов, добавленных менеджером тегов?