2 回答

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

TA貢獻1865條經驗 獲得超7個贊
通過 Content-Security-Policy 實現。
<!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/[email protected]/dayjs.min.js"></script>
<script>
alert(dayjs().$d);
</script>
添加回答
舉報