当前位置:首页 > JavaScript

js实现只刷新js代码

2026-03-15 12:41:49JavaScript

动态加载 JavaScript 文件

在浏览器环境中,可以通过动态创建 <script> 标签的方式重新加载 JavaScript 文件。该方法不会刷新整个页面,仅替换目标脚本:

function reloadScript(src) {
  const oldScript = document.querySelector(`script[src="${src}"]`);
  if (oldScript) oldScript.remove();

  const newScript = document.createElement('script');
  newScript.src = src + '?t=' + Date.now(); // 添加时间戳避免缓存
  document.body.appendChild(newScript);
}

使用模块热替换(HMR)

如果使用现代前端构建工具(如Webpack/Vite),可通过模块热替换机制实现局部刷新:

js实现只刷新js代码

if (module.hot) {
  module.hot.accept('./your-module.js', () => {
    console.log('模块已热更新');
    // 执行更新后的逻辑
  });
}

通过 iframe 隔离执行

创建隐藏的 iframe 来加载新版本脚本,通过 postMessage 与主页面通信:

js实现只刷新js代码

const iframe = document.createElement('iframe');
iframe.style.display = 'none';
document.body.appendChild(iframe);

iframe.contentWindow.location.reload();
iframe.contentWindow.eval(updatedCode);

利用 Service Worker 控制缓存

通过 Service Worker 拦截请求并返回更新后的脚本:

self.addEventListener('fetch', (event) => {
  if (event.request.url.includes('your-script.js')) {
    event.respondWith(
      fetch('your-script.js?v=' + version)
    );
  }
});

动态函数替换

对于特定函数的热更新,可通过重新定义函数实现:

window.myFunction = new Function('...新代码...');

注意事项

  • 时间戳或版本号是避免浏览器缓存的关键
  • 动态加载可能引发变量污染问题
  • 复杂状态应用需要考虑状态保持机制
  • 生产环境建议使用专业的热更新方案(如Webpack HMR)

标签: 代码js
分享给朋友:

相关文章

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

jquery代码

jquery代码

以下是关于jQuery代码的常见用法和示例,涵盖基础操作、事件处理、DOM操作等核心功能: 基础语法 jQuery通过$()函数选择元素,支持CSS选择器语法: // 选择所有<p>元…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

网页表格制作css代码

网页表格制作css代码

基础表格样式 使用CSS为HTML表格添加基础样式,包括边框、间距和背景色: table { width: 100%; border-collapse: collapse; margin…

php实现文件下载代码

php实现文件下载代码

实现文件下载的基本方法 使用PHP实现文件下载的核心是通过设置HTTP头部信息,强制浏览器触发下载行为而非直接显示文件内容。 $file_path = 'path/to/your/file.ext'…