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

如何在Electron预加载脚本中检测contextIsolation是否启用?

在预加载脚本中检测contextIsolation状态并适配不同场景

当然可以,有两种可靠的方式在预加载脚本中判断contextIsolation是否禁用,从而选择对应的API暴露方式:

方法一:使用process.contextIsolated直接判断

Electron在预加载脚本中提供了process.contextIsolated布尔属性,可直接获取当前窗口的contextIsolation状态:

// 预加载脚本代码
if (process.contextIsolated) {
  // 启用contextIsolation时,使用contextBridge安全暴露API
  const { contextBridge } = require('electron');
  contextBridge.exposeInMainWorld('appAPI', {
    getAppVersion: () => '1.0.0',
    openSettings: () => { /* 主进程通信逻辑 */ }
  });
} else {
  // 禁用contextIsolation时,直接挂载到window对象
  window.appAPI = {
    getAppVersion: () => '1.0.0',
    openSettings: () => { /* 主进程通信逻辑 */ }
  };
}

方法二:try-catch捕获contextBridge调用错误

如果担心版本兼容性,也可以通过捕获调用contextBridge.exposeInMainWorld时的报错来做降级处理:

// 预加载脚本代码
const { contextBridge } = require('electron');
try {
  contextBridge.exposeInMainWorld('appAPI', {
    getAppVersion: () => '1.0.0',
    openSettings: () => { /* 主进程通信逻辑 */ }
  });
} catch (err) {
  // 捕获到错误说明contextIsolation未启用,直接挂载window属性
  window.appAPI = {
    getAppVersion: () => '1.0.0',
    openSettings: () => { /* 主进程通信逻辑 */ }
  };
}

注意事项

  • 禁用contextIsolation时直接操作window会让暴露的API处于全局上下文,存在安全风险,建议仅在必要场景下使用这种方案。
  • 尽量保持业务逻辑的一致性,两种场景下暴露的API结构要完全相同,避免渲染端代码出现兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:02:07