2 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊
看了一下,我認(rèn)為大致是這樣的:
注意到它listen了DOMContentLoaded
(可在代碼中搜索DOMContentLoaded
),也就是當(dāng)DOM樹加載完成,外聯(lián)的CSS和JS還沒(méi)載入的時(shí)候,它的代碼開始執(zhí)行大清洗。
大清洗的時(shí)候,它把原先的script標(biāo)簽給刪掉了??梢栽诖a中搜索buildOriginalDOM
函數(shù)。buildOriginalDOM
函數(shù)里,注意到call了t.html.disable(n.headContent)
、t.html.disable(n.bodyContent)
,里面的disable方法就是在調(diào)用之處的前面一點(diǎn)點(diǎn)的位置定義的,干的事情也就是清洗掉原先的script標(biāo)簽。
于是它就重新建立了清洗完以后的DOM樹,再繼續(xù)加載頁(yè)面。
只是隨便掃了一眼代碼,不是很確定,也很可能不是這樣的。晚上有時(shí)間再仔細(xì)看看。

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
通過(guò) Content-Security-Policy 實(shí)現(xiàn)。
<!DOCTYPE html>
<script>
document.head.insertAdjacentHTML(
"beforeend",
`<meta http-equiv="Content-Security-Policy" content="script-src 'none'">`
);
</script>
<script src="http://cdn.jsdelivr.net/npm/dayjs@1.8.34/dayjs.min.js"></script>
<script>
alert(dayjs().$d);
</script>
添加回答
舉報(bào)