从 `<body>` 中删除属性定义的 `onload`

Remove Attribute-defined `onload` from `<body>`

我已经为此工作了几个小时,现在我觉得我可能正在尝试完成一些不可行的事情。非常感谢任何建议或见解!

我的目标用例需要在浏览器有机会绘制 <body> 元素之前中断浏览器的 DOM 解析。为此,我将这个单行代码用作 <head> 元素中调用的第一个脚本:

document.replaceChild(document.createElement('html'), document.children[0]);

这成功地阻止了浏览器调用任何后续脚本,并且 <body> 元素保持未呈现状态。但是,如果标记在 <body> 元素上包含 onload 属性,浏览器仍会调用该函数或代码。

由于拦截 DOM 解析的上下文在 <head> 中,我不能使用 document.body.removeEventListener() 来删除事件侦听器,因为 body 元素没有'还不存在。将 window.onload 设置为 null 没有效果,尝试使用 Object.defineProperty(window, 'onload', {...}) 拦截 window.onload 的设置也没有效果。在每种情况下,onload 函数或语句仍会被调用。

为了抢先解决为什么我不能只避免使用 <body onload="..."> 的明显问题,用例是针对开发人员工具的,所以我试图为某些绝对条件创造应急措施。如果它无法完成,它不会破坏我的项目,但我很想知道为什么它无法完成。

提前致谢!

可以在interactive状态下使用Document readystate,覆盖onload属性

document.onreadystatechange = () => {
   if (document.readyState === 'interactive') 
      window.onload = null;
}

(为了完整性从您的评论中添加了您的代码。)