当前位置:首页 > 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),可通过模块热替换机制实现局部刷新:

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

通过 iframe 隔离执行

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

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)
    );
  }
});

动态函数替换

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

js实现只刷新js代码

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

注意事项

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

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

相关文章

代码实现vue

代码实现vue

安装Vue.js 通过npm或yarn安装Vue.js最新稳定版本。确保已安装Node.js环境。 npm install vue # 或 yarn add vue 创建Vue实例 在HTML文件中…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取所有…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…