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

MacOS下Electron应用录屏权限请求:如何让应用名显示在权限列表

Electron 录屏权限请求问题解决方案

问题核心原因

systemPreferences.getMediaAccessStatus("screen") 仅用于查询当前权限状态,不会触发系统的录屏权限申请流程,因此你的应用不会被添加到系统隐私设置的录屏权限列表中。只有当实际发起录屏操作(如调用 desktopCapturer.getSources())时,macOS 才会弹出带应用名称的权限请求窗口,并将应用加入权限列表。

正确实现方案

要实现类似 VS Code 的权限请求体验,需将权限查询与实际触发权限请求的操作结合,流程如下:

  1. 先检查权限状态
  2. 未授权时,调用 desktopCapturer.getSources() 触发系统原生权限弹窗
  3. 用户拒绝权限后,再引导至系统设置(此时应用已出现在权限列表中)

示例代码

async function requestScreenCapturePermission() {
  // 检查当前权限状态
  const permissionStatus = systemPreferences.getMediaAccessStatus("screen");

  if (permissionStatus === "granted") {
    console.log("录屏权限已授权");
    return true;
  }

  try {
    // 触发系统原生权限请求弹窗
    const sources = await desktopCapturer.getSources({
      types: ["screen"],
      thumbnailSize: { width: 1920, height: 1080 },
    });

    if (sources.length > 0) {
      console.log("录屏权限已授权");
      return true;
    } else {
      // 用户拒绝权限,此时应用已加入系统权限列表
      console.log("用户拒绝录屏权限,将跳转至系统设置");
      shell.openExternal('x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture');
      return false;
    }
  } catch (error) {
    console.error("权限请求失败:", error);
    shell.openExternal('x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture');
    return false;
  }
}

// 在应用启动或需要录屏时调用
requestScreenCapturePermission();

关键说明

  • 必须通过 desktopCapturer.getSources() 触发权限申请:这是 Electron 官方推荐的方式,也是唯一能让系统识别应用录屏请求、将其加入权限列表的操作。
  • 避免直接跳转设置:未触发过权限请求就打开系统设置,应用不会出现在列表中,用户无法完成授权操作。
  • 权限拒绝后的处理:用户拒绝权限后,desktopCapturer.getSources() 会返回空数组,此时再打开系统设置,就能看到你的应用并手动授权。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:16:04