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

Electron框架中index.html报require is not defined错误如何解决?

错误原因

该报错由Electron安全配置导致:你在Main.js中开启了contextIsolation: true(上下文隔离,Electron高版本默认开启的安全选项),此时即使配置了nodeIntegration: true,渲染进程的普通网页上下文也无法直接访问Node.js的require方法,也不能直接调用Electron相关API。

解决方法

方案1:关闭上下文隔离(仅用于本地测试,禁止在生产环境使用)

直接修改Main.js中webPreferences的配置项,将contextIsolation设为false即可:

webPreferences: {
  nodeIntegration: true,
  contextIsolation: false, // 关闭上下文隔离
  enableRemoteModule: false,
  preload: path.join(__dirname, "preload.js")
}

注意:该方案会导致XSS攻击风险大幅提升,攻击者一旦在页面注入恶意代码就能直接获取系统权限,不推荐任何正式场景使用。

方案2:通过preload脚本暴露所需API(推荐,符合安全规范)

不需要修改原有安全配置,仅通过preload脚本将渲染进程需要用到的能力暴露到全局即可:

  1. 编辑项目中的preload.js文件(你已在Main.js中配置了该文件路径,若不存在直接新建即可):
const { contextBridge, ipcRenderer } = require('electron')

// 仅暴露需要的方法到渲染进程的全局window对象上
contextBridge.exposeInMainWorld('electronAPI', {
  submitFile: (fileInfo) => ipcRenderer.send('submit-file', fileInfo)
  // 其他需要用到的IPC方法都可以在此处扩展
})
  1. 修改index.html中的代码,删除直接调用require的逻辑,改用暴露的全局API:
<script>
document.querySelector('form').addEventListener('submit',(event) =>{
  event.preventDefault();
  const file = document.querySelector('input').files[0];
  // 调用preload暴露的方法
  window.electronAPI.submitFile(file);
});
</script>
  1. Main.js中的原有安全配置无需修改,保留contextIsolation: true即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:54:08