Electron中文手册
  • 文档概述
  • 开发指南目录
  • 构建说明(Linux)
  • 构建说明(macOS)
  • 构建说明(Windows)
  • 构建系统概述
  • 编码规范
  • 在 macOS 中调试
  • 在 Windows 中调试
  • 在C ++代码中使用clang-format
  • 在调试器中设置符号服务器
  • 源代码目录结构
  • Chrome升级清单
  • Chromium 开发指南
  • V8 开发指南
  • 教程目录
    • 关于 Electron
    • Electron 版本说明
    • API弃用说明
    • 快速入门
    • 支持的平台
    • 桌面环境集成
    • 系统通知
    • 离屏渲染
    • 在线/离线事件检测
    • 多线程
    • REPL
    • 键盘快捷键
    • DevTools扩展
    • 使用原生模块
    • 使用 Pepper Flash 插件
    • 使用 Selenium 和 WebDriver
    • 使用 Widevine CDM 插件
    • 应用分发
    • 应用打包
    • 主进程调试
    • 使用 node-inspector 进行主进程调试
    • 使用 VSCode 进行主进程调试
    • Mac App Store应用提交指南
    • Windows App Store应用提交指南
    • 安全,本地功能和你的责任
    • Headless CI Systems 测试
  • API接口目录
    • API接口之公用接口
      • 应用语言
      • 开发概要
      • 专业术语
      • 常见问题
      • 环境变量
      • 快捷键字符串
      • 命令行
      • 客户端请求
      • 剪贴板
      • <File> H5 File文件操作
      • 无框窗口
      • <window.open> window.open打开新窗口或打开时传递消息
      • 沙盒选项
    • API接口之主进程接口
      • 整体控制
      • 全局快捷键
      • 图标创建与应用
      • 屏幕
      • 窗口
      • 菜单
      • 菜单项
      • 系统托盘
      • 网页内容
      • 从主进程到渲染进程的异步通信
      • 对话框
      • 创建和控制视图
      • 会话
      • 会话,缓存和代理等控制
      • 页面请求
      • HTTP/HTTPS请求处理
      • 协议的注册和处理
      • 使用系统默认应用程序管理文件或URL
      • 下载项管理
      • 进程控制
      • Chromium原生网络库
      • 获取系统首选项
      • 电源状态
      • 节能管理
      • 调试工具
      • 奔溃报告
      • 性能数据收集
      • 自动更新
      • TouchBar触摸条
      • TouchBar触摸条按钮
      • TouchBar触摸条拾色器
      • TouchBar触摸条分组
      • TouchBar触摸条scrubber
      • TouchBar触摸条分段控件
      • TouchBar触摸条label标签
      • TouchBar触摸条弹出框
      • TouchBar触摸条滑块
      • TouchBar触摸条间隔符
    • API接口之渲染进程接口
      • 页面渲染
      • <webview> webview标签
      • 渲染进程与主进程通信
      • 从渲染进程到主进程的异步通信
      • 子窗口
      • 捕获桌面资源
  • 结构列表
    • 蓝牙设备对象
    • 证书对象
    • 证书主体对象
    • Cookie对象
    • 崩溃报告对象
    • 桌面捕获源对象
    • 显示器对象
    • 打印机信息对象
    • 文件过滤器对象
    • 最近使用的项目
    • 常用列表项
    • CPU使用率对象即程序占用的CPU资源
    • IO值对象
    • 内存信息对象
    • 进程内存信息对象
    • 内存使用详细信息
    • Mime类型缓冲区
    • 矩形对象
    • 删除客户端证书对象
    • 删除密码对象
    • Scrubber项对象
    • 分段控制对象
    • 快捷方式对象
    • 任务对象
    • 缩略图工具栏按钮对象
    • 上传blob对象
    • 上传数据对象
    • 上传文件系统对象
    • 上传文件对象
    • 上传原始数据对象
Powered by GitBook
On this page
  • 创建无框窗口
  • macOS上的替代方案
  • 透明窗口
  • 限制
  • 临时的穿透方案
  • 可拖动区域
  • 文本选择
  • 上下文菜单

Was this helpful?

  1. API接口目录
  2. API接口之公用接口

无框窗口

Previous<File> H5 File文件操作Next<window.open> window.open打开新窗口或打开时传递消息

Last updated 4 years ago

Was this helpful?

没有工具栏或任何边框仅纯内容的窗口.

创建无框窗口

在 的 options中设置 frame 为 false 即可创建无框窗口.

const {BrowserWindow} = require('electron')
let win = new BrowserWindow({width: 800, height: 600, frame: false})
win.show()

macOS上的替代方案

在macOS 10.9 Mavericks和更新版本中,有一种不同于设置 frame为 false的替代方法来生成无边框窗口。

无边框通常会隐藏标题栏以及失去对窗口的控制,如果你希望无边框的同时又保持对窗口的控制( traffic lights)。你可以通过设置下文的 titleBarStyle两个属性来实现:

hidden

仅左上角有正常窗口控制( traffic lights)的无边框.

const {BrowserWindow} = require('electron')
let win = new BrowserWindow({titleBarStyle: 'hidden'})
win.show()

hidden-inset

在边缘嵌入窗口控制( traffic lights)

const {BrowserWindow} = require('electron')
let win = new BrowserWindow({titleBarStyle: 'hidden-inset'})
win.show()

透明窗口

设置 transparent为 true可使无框窗口透明:

const {BrowserWindow} = require('electron')
let win = new BrowserWindow({transparent: true, frame: false})
win.show()

限制

  • 透明窗口是不可调整大小的。在某些平台上,设置 resizable为 true也许会造成透明窗口停止工作。

  • blur滤光器只适用于网页,所以没法将模糊效果用于窗口之下

  • 在Windows系统中,当DWM被禁用时透明窗口不会工作。

  • Linux用户需要命令行 --enable-transparent-visuals --disable-gpu

  • 在Mac上,透明窗口的阴影不会显示出来.

临时的穿透方案

使用[win.setIgnoreMouseEvents(ignore)][ignore-mouse-events] API创建可穿透窗口(即不响应所有的鼠标事件):

const {BrowserWindow} = require('electron')
let win = new BrowserWindow()
win.setIgnoreMouseEvents(true)

可拖动区域

默认情况下,无框窗口是不可拖动的。

您需要在CSS中设置 -webkit-app-region: drag设定可拖动区域,或设置 -webkit-app-region: no-drag 禁止拖动的区域。

需要注意的是,目前只支持矩形区域。

<body style=`-webkit-app-region: drag`>
</body>

另外需要注意的是,如果你设置了整个窗口可拖动,你必须标记按钮为不可拖动,否则用户无法点击它们:

button {
  -webkit-app-region: no-drag;
}

如果你设置一个自定义的标题栏可拖动,你同样需要将标题栏中所有按钮设置为不可拖动.

文本选择

在一个无框窗口中,拖动动作可能与文本选择发生冲突。比如,当你拖动标题栏,可能会变成选中标题栏上的文本。

为了防止这种情况发生,你需要向下面这样在一个可拖动区域中禁用文本选择:

.titlebar {
  -webkit-user-select: none;
  -webkit-app-region: drag;
}

上下文菜单

在一些平台上,可拖动区域会被认为是非客户端框架(non-client frame),当你点击右键时,会弹出系统菜单。

为了保证上下文菜单在所有平台下正确的显示,你不应该在可拖动区域使用自定义上下文菜单。

[ignore-mouse-events]: browser-window.md#winsetignoremouseeventsignore

无法点击穿透区域(透明窗口实质是个矩形窗口,假设内容是圆形,那么圆形与矩形的交集处透明区域无法点击穿透)。详见

来禁用GPU以及允许ARGB去渲染透明窗口,这是由于一个Linux上的上游bug造成的

BrowserWindow
讨论帖
详见此文