创建一个html文档,并在其中加载脚本,如下所示:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
</head>
<body>
</body>
</html>
我的问题是,是否有办法通过在脚本始发地code.jquery.com
之前添加脚本来阻止脚本调用,然后对其进行扫描然后阻止它。
我什么都没找到。
希望你能帮助我。
谢谢!
答案 0 :(得分:2)
您可以使用我编写的以下功能阻止脚本运行。
blockScript
将遍历所有脚本标签,并删除任何脚本标签的源,包括您提供的源。请注意,这使用includes API,它将删除所有匹配的脚本标签。
function blockScript(origin) {
const scripts = Array.from(document.getElementsByTagName("SCRIPT"));
if (scripts.length > 0) {
scripts.forEach((script) => {
if (script.src.includes(origin)) {
document.head.removeChild(script);
}
})
}
}
使用MutationObserver,您可以监视DOM的变化。
const observer = new MutationObserver((mutationsList, observer) => {
for(let mutation of mutationsList) {
const addedNodes = Array.from(mutation.addedNodes);
if (addedNodes && addedNodes.some(n => n.nodeName === 'SCRIPT')) {
blockScript('code.jquery.com');
}
observer.disconnect();
}
});
observer.observe(document, { childList: true, subtree: true });
把所有东西放在一起...
<script>
function blockScript(origin) {
const scripts = Array.from(document.getElementsByTagName("SCRIPT"));
if (scripts.length > 0) {
scripts.forEach((script) => {
if (script.src.includes(origin)) {
document.head.removeChild(script);
}
})
}
}
</script>
<script>
const observer = new MutationObserver((mutationsList, observer) => {
for(let mutation of mutationsList) {
const addedNodes = Array.from(mutation.addedNodes);
if (addedNodes && addedNodes.some(n => n.nodeName === 'SCRIPT')) {
blockScript('code.jquery.com');
}
observer.disconnect();
}
});
observer.observe(document, { childList: true, subtree: true });
</script>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous" ></script>
<script>
$(document).ready(function() {
console.log('I am undefined');
})
</script>
您应该得到
Uncaught ReferenceError: $ is not defined
我仅使用Chrome浏览器进行过测试。