【发布时间】:2020-03-01 06:40:27
【问题描述】:
我编写了一些需要由 Google 跟踪代码管理器触发的代码。基本上,它会在页面中注入一些 HTML 元素并在几秒钟后显示一个弹出窗口。
可以在此处查看预期的行为:https://codepen.io/jfix/pen/dxdBVK
标签配置是“自定义 HTML”和以下代码,带有定时触发器:
<style type="text/css">
.centered {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
div#popup {
display: none;
}
.box {
background: white;
padding: 2em;
}
.bordered {
border-radius: 10px 10px 10px 10px;
box-shadow: 10px 10px 30px 10px rgba(0,0,0,0.75);
}
iframe#popupIframe {
height: 600px;
width: 810px;
border: none;
overflow: hidden;
z-index: 4;
}
#popup #close {
float: right;
font-size: 200%;
font-weight: bold;
cursor: pointer;
}
</style>
<script>
window.addEventListener("load", function() {
try {
var body = document.querySelector("body");
var div = document.createElement("div");
div.innerHTML = '<div class="centered bordered box" id="popup">' +
'<div id="close">×</div>' +
'<iframe id="popupIframe" src="about:blank" data-src="https://survey2018.oecd.org/Survey.aspx?s=0f083fb30cc34e04977ae35d45ce3258"></iframe>' +
'</div>';
var popup = body.insertBefore(div, null);
} catch(e) {
console.log('Error in addEventListener:', e);
}
// display popup and load iframe on demand
function showPopup() {
try {
var iframe = document.getElementById("popupIframe");
var url = iframe.getAttribute("data-src");
iframe.setAttribute("src", url);
var popup = document.getElementById("popup");
popup.style.display = "block";
popup.style.zIndex = "3";
} catch(e) {
console.log('Error in showPopup():', e);
}
}
// hide popup
function dismissPopup() {
try {
var popup = document.getElementById("popup");
popup.style.display = "none";
} catch(e) {
console.log('Error in dismissPopup(): ', e);
}
}
// display popup after 3 seconds
//setTimeout(showPopup, 3000); // GTM has already a waiting period of three seconds ...
showPopup()
// mechanics to dismiss popup when clicking
// close button or anywhere outside it.
popup.addEventListener("click", dismissPopup);
window.addEventListener("click", function(event) {
if (event.target !== popup) {
dismissPopup();
}
});
});
</script>
只要我处于预览/调试模式,它就可以正常工作,即 GTM 预览/调试窗格显示在目标页面上。
例如,如果我从隐身窗口发布更改和测试,则不会发生任何事情。控制台中没有错误消息,什么都没有。
我还更改了触发器以查看问题是否存在,不是在计时器上触发标签,而是在窗口加载时触发,没有变化。
有一个我不使用的支持document.write 的选项。我已经尝试过选择和取消选择选项。没有运气。
请注意,我确保没有使用 jQuery,仅使用 Vanilla Javascript,没有 ES2015 或其他高级功能(箭头函数、反引号字符串模板,没什么花哨的)。
【问题讨论】:
标签: javascript google-tag-manager