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

如何在Electron中通过window.loadURL()捕获503等5XX HTTP错误

捕获Electron中页面加载的5XX HTTP状态码错误

Electron的did-fail-load事件仅触发于无法建立连接、DNS解析失败、无响应这类完全加载失败的场景,而网关返回的5XX状态码属于服务器正常返回了HTTP响应,因此不会触发该事件。要捕获这类错误,需要使用did-get-response-details事件,它能获取到每个请求的响应详情,包括状态码。

实现步骤

  • 监听webContents的did-get-response-details事件,该事件会返回请求的响应状态码、资源类型等关键信息
  • 通过resourceType过滤出主页面的请求(避免捕获CSS、JS、图片等子资源的5XX错误)
  • 判断响应状态码是否处于500-599区间,若是则执行自定义错误处理逻辑

代码示例

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

function createWindow() {
  const win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: false,
      contextIsolation: true
    }
  });

  // 监听响应详情事件,捕获5XX错误
  win.webContents.on('did-get-response-details', (event, status, newURL, originalURL, httpResponseCode, requestMethod, referrer, headers, resourceType) => {
    // 仅处理主页面的请求
    if (resourceType === 'mainFrame' && httpResponseCode >= 500 && httpResponseCode < 600) {
      console.log(`捕获到5XX错误:状态码${httpResponseCode},请求地址${originalURL}`);
      // 自定义错误处理:比如加载本地错误页面
      win.loadFile('./error-pages/5xx-error.html');
    }
  });

  // 保留原有连接类错误的监听
  win.webContents.on('did-fail-load', (event, errorCode, errorDescription) => {
    console.log(`连接类错误:${errorDescription},错误码${errorCode}`);
  });

  win.loadURL("https://localhost:443/myapp/index.html");
}

app.whenReady().then(createWindow);

补充说明

  • 若需要更精准过滤主页面请求,可直接用resourceType === 'mainFrame'判断
  • 捕获到5XX错误后,可根据业务需求实现重试逻辑、展示友好提示页面或记录错误日志
  • 该事件在Electron v1.8及以上版本均支持,无需担心兼容性问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:00:01