Я пытаюсь создать строку из конкатенации innerHTML и значений атрибутов элемента из дочерних элементов с помощью Google Tag Manager. Когда я запускаю getElementsByClassName для захвата всех дочерних элементов через GTM, он не захватывает никаких данных, так как я проверяю «isPdpFamilyMember.length» и в результате получаю 0.
Я использовал и GTM, и расширение TamperMonkey Chrome для запуска скрипта в режиме реального времени. Единственный раз, когда скрипт запускается правильно, это когда загрузка страницы завершается, и я вхожу в панель консоли Chrome devtools и нажимаю «return».
Это пример кода, который должен обрабатывать скрипт. Он присутствует в клиенте, но не в исходном коде:
<div id="mz-family-container">
<div class="family-members"></div>
<div class="family-members"></div>
</div>
Это то, что на самом деле в исходном коде:
<div id="mz-family-container"></div>
Это скрипт из GTM:
(function() {
window.onload=function(){var pdpMain = document.querySelectorAll('div[itemtype="http://schema.org/Product"]')[0],
isPdpFamily = document.getElementById('mz-family-container'),
isPdpFamilyMember,
pdpMainIdNos = /[0-9]{4,7}/,
pdpMainId = pdpMainIdNos.exec(pdpMain.querySelectorAll('span[itemprop="sku"]')[0].innerHTML),
pdpMainColorContainer,
pdpMainColor,
pdpMainSizeContainer,
pdpMainSize,
pdpMainSku,
i;
if (isPdpFamily) {
isPdpFamilyMember = isPdpFamily.getElementsByClassName('family-members');
for (i = 0; i < isPdpFamilyMember.length; i++) {
var isPdpFamilyMemberThis = isPdpFamilyMember[i].getAttribute('id');
if (isPdpFamilyMemberThis = pdpMainId) {
pdpMainColorContainer = isPdpFamilyMember[i].querySelectorAll('select[data-mz-product-option="tenant~color"]')[0];
pdpMainColor = pdpMainColorContainer.options[1].value;
pdpMainSizeContainer = isPdpFamilyMember[i].querySelectorAll('select[data-mz-product-option="tenant~size"]')[0];
pdpMainSize = pdpMainSizeContainer.options[1].value;
pdpMainSku = isPdpFamilyMemberThis + "-" + pdpMainColor.toUpperCase() + "-" + pdpMainSize.toUpperCase();
} else {
continue;
}
}
} else {
pdpMainColorContainer = pdpMain.querySelectorAll('select[data-mz-product-option="tenant~color"]')[0];
pdpMainColor = pdpMainColorContainer.options[1].value;
pdpMainSizeContainer = pdpMain.querySelectorAll('select[data-mz-product-option="tenant~size"]')[0];
pdpMainSize = pdpMainSizeContainer.options[1].value;
pdpMainSku = pdpMainId + "-" + pdpMainColor.toUpperCase() + "-" + pdpMainSize.toUpperCase();
}
return pdpMainSku;
}
})();
Поскольку «isPdpFamilyMember.length» приводит к 0, дочерние атрибуты не существуют, и строка не может быть создана.