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

Electron在VS Code中运行报错:Not allowed to load local resource排查

问题原因与解决方案

嘿,这个问题我之前也碰到过,核心就是Electron启动时的工作目录不一致导致的,咱们一步步说清楚:

为什么会出现这个报错?

  • 启动路径的差异是关键:
    当你用npm start启动时,命令是在你的项目根目录执行的,这时候Electron的工作目录就是你的项目根,所以你用相对路径scripts/ui/startup/startup.html能正确找到文件。
    但VS Code直接调用/usr/local/bin/electron启动时,Electron的工作目录变成了它的安装目录(也就是你看到的/usr/local/lib/node_modules/electron/dist/Electron.app/Contents/Resources/),这时候你的相对路径会基于这个目录去查找,自然找不到你项目里的文件,就抛出了"Not allowed to load local resource"的错误。
  • 之前正常的原因:
    没加跳转代码时,你加载index.html的方式应该是正确的(比如用了绝对路径,或者Electron默认从工作目录加载时,当时的工作目录刚好是项目根),但添加跳转后用了相对路径,就暴露了工作目录不一致的问题。

解决办法(三种任选其一)

1. 用__dirname构建绝对路径(最推荐,不受启动方式影响)

在你的主进程脚本里,不要用相对路径,而是借助Node.js的__dirname(当前脚本所在的目录)来拼接出绝对路径,这样不管从哪启动都能找到文件:

const path = require('path');
const { app, BrowserWindow } = require('electron');

function createWindow() {
  const win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      contextIsolation: false, // 根据你的Electron版本调整,确保路径能正确解析
      nodeIntegration: true
    }
  });

  // 假设你的主进程脚本在项目根目录,拼接出startup.html的绝对路径
  const startupHtmlPath = path.join(__dirname, 'scripts', 'ui', 'startup', 'startup.html');
  win.loadFile(startupHtmlPath);
}

app.whenReady().then(createWindow);

2. 配置VS Code的调试工作目录

如果习惯用VS Code的调试功能启动,修改.vscode/launch.json,给启动配置加上cwd字段,指定工作目录为你的项目根:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Electron: Main",
      "type": "node",
      "request": "launch",
      "program": "${workspaceFolder}/main.js", // 替换成你的主进程文件路径
      "runtimeExecutable": "/usr/local/bin/electron",
      "cwd": "${workspaceFolder}" // 关键:设置工作目录为项目根
    }
  ]
}

3. 在VS Code终端用npm start启动

直接在VS Code的终端里运行npm start,这样启动环境和你手动在项目根执行命令一致,工作目录正确,相对路径就能正常识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:44:16