2 回答
TA贡献1836条经验 获得超13个赞
看了一下,我认为大致是这样的:
注意到它listen了DOMContentLoaded
(可在代码中搜索DOMContentLoaded
),也就是当DOM树加载完成,外联的CSS和JS还没载入的时候,它的代码开始执行大清洗。
大清洗的时候,它把原先的script标签给删掉了。可以在代码中搜索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/dayjs@1.8.34/dayjs.min.js"></script>
<script>
alert(dayjs().$d);
</script>
添加回答
举报