在 jQuery 文档准备好之前,在 Window 上执行 DOMContentLoaded 事件
Enforce DOMContentLoaded event on Window before jQuery Document ready
假设我的页面某处有以下两个脚本标记:
<script>
window.addEventListener("DOMContentLoaded",
function()
{
console.log("DOM loaded");
}
);
</script>
...
<script>
$(document).ready(
function()
{
console.log("Document ready");
}
);
</script>
是否有任何简单的方法来强制在 $().ready
之前触发 DOMContentLoaded 事件?
这是我的实际问题的简化示例。我面临的真正问题是 DOMContentLoaded 事件已在我包含在页面正文底部的第三方库中注册,而且我有太多 $().ready
调用无法快速更改它们。理论上,我可以将 window.addEventListener
更改为 document.addEventListener
而不会产生任何问题,但是因为我在页面头部包含了 jQuery,所有 $().ready
调用仍然会在 document.addEventListener("DOMContentLoaded"...)
,正如here所解释的那样,我无法合理地移动jQuery或这个第三方库的包含位置。如果可能,我还想避免更改第三方库。
您可以使用$.holdReady()
<script>
$.holdReady(true);
window.addEventListener("DOMContentLoaded", function() {
console.log("DOM loaded");
$.holdReady(false);
});
</script>
...
<script>
$(document).ready(function() {
console.log("Document ready");
});
</script>
假设我的页面某处有以下两个脚本标记:
<script>
window.addEventListener("DOMContentLoaded",
function()
{
console.log("DOM loaded");
}
);
</script>
...
<script>
$(document).ready(
function()
{
console.log("Document ready");
}
);
</script>
是否有任何简单的方法来强制在 $().ready
之前触发 DOMContentLoaded 事件?
这是我的实际问题的简化示例。我面临的真正问题是 DOMContentLoaded 事件已在我包含在页面正文底部的第三方库中注册,而且我有太多 $().ready
调用无法快速更改它们。理论上,我可以将 window.addEventListener
更改为 document.addEventListener
而不会产生任何问题,但是因为我在页面头部包含了 jQuery,所有 $().ready
调用仍然会在 document.addEventListener("DOMContentLoaded"...)
,正如here所解释的那样,我无法合理地移动jQuery或这个第三方库的包含位置。如果可能,我还想避免更改第三方库。
您可以使用$.holdReady()
<script>
$.holdReady(true);
window.addEventListener("DOMContentLoaded", function() {
console.log("DOM loaded");
$.holdReady(false);
});
</script>
...
<script>
$(document).ready(function() {
console.log("Document ready");
});
</script>