You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除head中所有script标签,即便其处于异步执行状态?

删除head中所有script标签(含异步执行中的)

普通自定义JS搞不定的核心原因是:这类脚本往往在你的代码运行前就已经开始加载甚至执行了。下面是几种可行的解决办法:

1. 开发者工具实时拦截删除

打开浏览器F12开发者工具:

  • 暂停脚本执行再删除:先切到Sources面板,点击暂停按钮(⏸️),或者勾选「Pause on exceptions」,让页面脚本暂停运行。然后切到Elements面板,展开<head>选中所有<script>标签删除,或者在控制台执行:
    document.head.querySelectorAll('script').forEach(s => s.remove())
    
    操作完再恢复脚本执行,就能阻止剩余代码运行。
  • 实时监听DOM变化:如果不想暂停,也可以在控制台提前执行监听脚本,一旦head里出现script就立刻删除:
    new MutationObserver(muts => {
      muts.forEach(mut => {
        mut.addedNodes.forEach(n => {
          if(n.tagName === 'SCRIPT' && n.parentElement === document.head) n.remove()
        })
      })
    }).observe(document.head || document.documentElement, {childList: true})
    

2. 用浏览器扩展从根源拦截

直接在请求层面阻止script加载,比删除标签更彻底:

  • 广告拦截扩展:比如uBlock Origin,添加自定义过滤规则:
    *$script,domain=你的目标网站域名
    
    这条规则会阻止该网站所有script资源的请求,自然不会有script标签插入head。
  • 油猴脚本提前监听:用Tampermonkey编写run-at: document-start的脚本,在文档刚启动时就监听head的DOM变化,第一时间删除插入的script:
    // ==UserScript==
    // @name         清除Head所有Script
    // @match        *://目标网站域名/*
    // @run-at       document-start
    // ==/UserScript==
    (() => {
      const observer = new MutationObserver(mutations => {
        mutations.forEach(m => {
          m.addedNodes.forEach(node => {
            if (node.tagName === 'SCRIPT' && node.parentElement === document.head) {
              node.remove();
            }
          });
        });
      });
      observer.observe(document.head || document.documentElement, { childList: true });
    })();
    
    这个脚本的执行时机远早于页面自带的脚本,能覆盖所有异步插入的script。

3. 本地拦截(极端场景)

如果目标脚本来自第三方域名,可以修改本地hosts文件,将该第三方域名指向127.0.0.1,让浏览器无法下载脚本;或者用代理工具在请求阶段拦截script资源,返回空内容,阻止脚本执行。


内容的提问来源于stack exchange,提问作者Derek Wu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:25:23