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

如何在不修改HTML原文件情况下加载时注入JS文件且无需启动服务

实现方案(纯前端无服务、无需修改index.htm)

核心思路是通过同目录下的loader.htm作为入口,打开index.htm新窗口后动态注入对应mock文件,完全符合需求:

1. 核心逻辑说明

所有文件(loader.htm、index.htm、所有mock js文件)放在同一个本地目录下,点击loader.htm的按钮时,打开index.htm新窗口,待目标页面加载完成后,直接操作新窗口的DOM,插入对应mock文件的script标签即可。

2. 完整代码示例(loader.htm)

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>测试用例加载器</title>
</head>
<body>
  <!-- 测试用例按钮支持批量生成无需手写 -->
  <button class="mock-btn" data-mock="mock_001.js">测试用例1</button>
  <button class="mock-btn" data-mock="mock_002.js">测试用例2</button>
  <!-- 批量生成100个按钮的示例逻辑:
  <script>
    for(let i=1;i<=100;i++) {
      const btn = document.createElement('button')
      btn.className = 'mock-btn'
      btn.dataset.mock = `mock_${String(i).padStart(3, '0')}.js`
      btn.textContent = `测试用例${i}`
      document.body.appendChild(btn)
    }
  </script>
  -->

  <script>
    const mockBtns = document.querySelectorAll('.mock-btn')
    mockBtns.forEach(btn => {
      btn.addEventListener('click', () => {
        // 取当前按钮对应的mock文件名
        const mockFile = btn.dataset.mock
        // 打开index.htm新窗口
        const targetPage = window.open('index.htm', '_blank')
        // 监听目标页面加载完成事件
        targetPage.addEventListener('load', () => {
          // 创建注入用的script标签
          const injectScript = targetPage.document.createElement('script')
          injectScript.src = mockFile
          // 插入到body末尾
          targetPage.document.body.appendChild(injectScript)
        })
      })
    })
  </script>
</body>
</html>

3. 浏览器兼容处理

如果Chrome下操作提示跨域,两种解决方案:

  • 更换Firefox浏览器运行,Firefox默认允许同目录本地文件的父子窗口DOM操作
  • 给Chrome添加启动参数--allow-file-access-from-files后再运行,适合固定测试环境

提示:如果需要mock代码更早执行,可将监听的load事件替换为DOMContentLoaded,可以在页面DOM解析完成后就立即注入mock代码,避免生产代码先执行导致的替换失效。

4. 参数化说明

mock文件名完全支持参数化,只要在按钮的data-mock属性中配置对应mock文件的名称即可,支持任意命名规则的mock文件,无需修改核心逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:48:03