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

如何通过Chrome扩展替换网站全部HTML代码?已配置manifest.json

解决Chrome扩展替换指定网站HTML的问题

嘿,我懂你现在的困扰——已经配置好content_scripts触发了,但用document.write没成功,想要彻底替换目标网站的HTML代码对吧?别愁,给你两种靠谱的方案,按需选就行:

方案一:通过Content Script直接替换DOM(简单直接)

document.write失效大概率是时机不对——如果你的content script在页面加载完成后才运行,document.write要么会异常,要么就算覆盖了页面也会出现奇怪的问题。调整时机+直接替换DOM就能搞定:

步骤1:修改manifest.json的注入时机

把run_at设为"document_start",让脚本在页面开始渲染前就注入,抢在原页面内容加载前完成替换:

{
  "content_scripts": [
    {
      "matches": ["https://目标网站域名/*"],
      "js": ["content.js"],
      "run_at": "document_start"
    }
  ]
}

步骤2:在content.js里替换整个HTML

直接替换根元素的内容,把你修改好的完整HTML字符串塞进去就行:

// 假设modifiedHtml是你已经编辑好的完整HTML代码
const modifiedHtml = `<!DOCTYPE html>
<html>
  <head>
    <title>修改后的页面</title>
    <!-- 你的自定义头部内容 -->
  </head>
  <body>
    <!-- 你的自定义页面内容,包括替换后的script标签 -->
    <script>console.log("这是替换后的脚本内容");</script>
  </body>
</html>`;

// 完全替换原页面的所有内容
document.documentElement.innerHTML = modifiedHtml;

这种方式会彻底覆盖原页面的所有代码,包括所有<script>标签,完美满足你的需求。

方案二:用WebRequest API拦截替换响应(更彻底)

如果目标网站有防篡改机制,或者你想从根源上替换服务器返回的内容,就用这个方法——直接拦截网站的HTML请求,把响应改成你自己的版本:

步骤1:在manifest.json添加权限

需要webRequest和webRequestBlocking权限,加上目标网站的主机权限:

{
  "permissions": [
    "webRequest",
    "webRequestBlocking",
    "https://目标网站域名/*"
  ],
  "background": {
    "service_worker": "background.js"
  }
}

步骤2:在background.js里拦截并替换

// 提前定义好你修改后的完整HTML代码
const modifiedHtml = `<!DOCTYPE html>
<!-- 你的自定义HTML内容 -->`;

chrome.webRequest.onBeforeRequest.addListener(
  function(details) {
    // 只拦截主页面的HTML请求,避免替换CSS/JS等资源
    if (details.type === "main_frame") {
      return {
        redirectUrl: "data:text/html," + encodeURIComponent(modifiedHtml)
      };
    }
  },
  { urls: ["https://目标网站域名/*"] },
  ["blocking"]
);

这种方式相当于让浏览器直接加载你修改后的内容,完全绕开原页面的渲染,非常彻底。

额外小技巧

如果只是想替换特定的<script>标签而非整个HTML,可以这么做:

// 替换所有内联script的内容
document.querySelectorAll('script:not([src])').forEach(script => {
  script.textContent = "你的自定义脚本内容";
});

// 替换指定src的外部脚本
document.querySelectorAll('script[src="原脚本地址"]').forEach(script => {
  script.src = "你的自定义脚本地址";
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:29:13