我已經為此作業了幾個小時,現在我覺得我可能正在嘗試完成一些不可行的事情。任何建議或見解絕對不勝感激!
我針對的用例需要在瀏覽器有機會繪制<body>元素之前中斷瀏覽器的 DOM 決議。為了實作這一點,我使用了這個單行作為在我的<head>元素中呼叫的第一個腳本:
document.replaceChild(document.createElement('html'), document.children[0]);
這成功地阻止了瀏覽器呼叫任何后續腳本,并且<body>元素保持未渲染。但是,如果標記包含元素onload上的屬性<body>,則瀏覽器仍會呼叫該函式或代碼。
由于攔截 DOM 決議的背景關系在 中<head>,我不能使用document.body.removeEventListener()洗掉事件偵聽器,因為該body元素尚不存在。設定window.onload為null沒有效果,嘗試攔截window.onloadusing 的設定也沒有效果Object.defineProperty(window, 'onload', {...})。在每種情況下,onload仍會呼叫函式或陳述句。
為了先解決關于為什么我不能避免使用的明顯問題<body onl oad="...">,用例是針對開發人員工具的,所以我試圖為某些絕對條件創建應急。如果它不能完成,它對我的??專案來說不是殺手,但我肯定想知道為什么它不能完成。
提前致謝!
uj5u.com熱心網友回復:
您可以在狀態處使用Document readystateinteractive,并覆寫該onload屬性。
document.onreadystatechange = () => {
if (document.readyState === 'interactive')
window.onload = null;
}
(為了完整性,從您的評論中添加了您的代碼。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/362132.html
標籤:javascript html 事件
下一篇:使用第二個陣列計算陣列中的唯一值
