【发布时间】:2021-01-13 18:18:35
【问题描述】:
我有一个包含多个组件的 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 的超时时间,但这让我很不爽。有没有更明智的做法?
【问题讨论】:
-
不需要添加
window.。window对象是所有变量的顶级作用域。 -
如果代码正常运行,在你使用Bugsnag时失败,听起来像是Bugsnag问题。
标签: javascript scope referenceerror bugsnag