我有一个包含多个组件的 AEM 页面,这些组件有一个 .js 文件,其中包含一个包含所有客户端逻辑的函数。然后我们在组件的 HTML 中调用该函数:
<script>
window.bootstrap_component(function() {
init_component_name();
});
</script>
如前所述,init_component_name 是包含我们需要的所有逻辑的函数的名称:
function init_component_name() {
//DO STUFF
}
包装器 bootstrap_component 功能在我们所有页面的共享 head.html 中定义为:
<script>
window.bootstrap_component = function (handler) {
if (typeof handler === 'function') {
if (document.readyState === "complete" || document.readyState === "loaded" || document.readyState === "interactive") {
handler();
} else {
document.addEventListener("DOMContentLoaded", function() {
handler();
});
}
}
}
</script>
这工作正常,我们没有任何实际问题,但我们最近开始使用 Bugsnag 进行错误监控和报告,并且我们收到几乎每个组件的报告,在页面上都说 ReferenceError 所以/和/所以 init_component_name() 没有定义。
我认为发生这种情况的原因是因为 init_component_name() 函数未在脚本标记中声明,并且因为这个函数(init_component_name)已附加到它正在执行的窗口对象,并且您没有看到任何控制台错误。
如果我是正确的,是否会将这些脚本标签修改为这样的工作?
<script>
window.bootstrap_component(function() {
window.init_component_name();
})
</script>
我的一位同事想为 init_component_name 函数添加一个超时时间,比如 1ms,但它让我感觉不对劲。有没有更明智的做法?