[browser-window](https://www.electronjs.org/docs/api/browser-window) 它只能在主进程中使用
~~~
// 这样写在主进程会有用,但是在渲染进程中会提示'未定义'
const { BrowserWindow } = require('electron')
const win = new BrowserWindow()
~~~
渲染进程中使用请使用以下方式:
~~~javascript
//这样写在渲染进程中时行得通的,但是在主进程中是'未定义'
const { remote } = require('electron')
const { BrowserWindow } = remote
const win = new BrowserWindow()
~~~
### [`new BrowserWindow([options])`](https://www.electronjs.org/docs/api/browser-window#new-browserwindowoptions)[](https://www.electronjs.org/docs/api/browser-window#new-browserwindowoptions "Permalink")
* `选项`Object (可选)
* `width`Integer (可选) - 窗口的宽度,单位为像素。默认为`800`.
* `height`Integer(可选) - 窗口的高度,单位为像素。默认为`600`.
* `x`Integer (optional) - (**required**if y is used) Window's left offset from screen. Default is to center the window.
* `y`Integer (optional) - (**required**if x is used) Window's top offset from screen. Default is to center the window.
* `useContentSize`Boolean (可选) -`width`和`height`将设置为 web 页面的尺寸(译注: 不包含边框), 这意味着窗口的实际尺寸将包括窗口边框的大小,稍微会大一点。 默认值为`false`.
* `center`Boolean (可选) - 窗口在屏幕居中.
* `minWidth`Integer (可选) - 窗口的最小宽度, 默认值为`0`.
* `minHeight`Integer (可选) - 窗口的最小高度. 默认值为`0`.
* `maxWidth`Integer (可选) - 窗口的最大宽度, 默认无限制.
* `maxHeight`Integer (可选) - 窗口的最大高度, 默认无限制.
* `resizable`Boolean (可选) - 窗口是否可以改变尺寸. 默认值为`true`.
* `movable`Boolean (可选) - 窗口是否可以移动. 在 Linux 中无效. 默认值为`true`.
* `minimizable`Boolean (可选) - 窗口是否可以最小化. 在 Linux 中无效. 默认值为`true`.
* `maximizable`Boolean (可选) - 窗口是否可以最大化动. 在 Linux 中无效. 默认值为`true`.
* `closable`Boolean (可选) - 窗口是否可以关闭. 在 Linux 中无效. 默认值为`true`.
* `focusable`Boolean (可选) - 窗口是否可以聚焦. 默认值为`true`。 在 Windows 中设置`focusable: false`也意味着设置了`skipTaskbar: true`. 在 Linux 中设置`focusable: false`时窗口停止与 wm 交互, 并且窗口将始终置顶。
* `alwaysOnTop`Boolean (可选) -窗口是否永远在别的窗口的上面. 默认值为`false`.
* `fullscreen`Boolean (可选) - 窗口是否全屏. 当明确设置为`false`时,在 macOS 上全屏的按钮将被隐藏或禁用. 默认值为`false`.
* `fullscreenable`Boolean (可选) - 窗口是否可以进入全屏状态. 在 macOS上, 最大化/缩放按钮是否可用 默认值为`true`。
* `simpleFullscreen`Boolean (可选) - 在 macOS 上使用 pre-Lion 全屏. 默认为`false`.
* `skipTaskbar`Boolean (可选) - 是否在任务栏中显示窗口. 默认值为`false`.
* `kiosk`Boolean (可选) - kiosk 模式. 默认值为`false`.
* `title`String(可选) - 默认窗口标题 默认为`"Electron"`。 如果由`loadURL()`加载的HTML文件中含有标签`<title>`,此属性将被忽略。
* `icon`([NativeImage](https://www.electronjs.org/docs/api/native-image)| String) (可选) - 窗口的图标. 在 Windows 上推荐使用`ICO`图标来获得最佳的视觉效果, 默认使用可执行文件的图标.
* `show`Boolean (可选) - 窗口创建的时候是否显示. 默认值为`true`.
* `paintWhenInitiallyHidden`Boolean (optional) - Whether the renderer should be active when`show`is`false`and it has just been created. In order for`document.visibilityState`to work correctly on first load with`show: false`you should set this to`false`. Setting this to`false`will cause the`ready-to-show`event to not fire. 默认值为`true`。
* `frame`Boolean (可选) - 设置为`false`时可以创建一个[Frameless Window](https://www.electronjs.org/docs/api/frameless-window). 默认值为`true`.
* `parent`BrowserWindow (可选) - 指定父窗口. 默认值为`null`.
* `modal`Boolean (可选) -是否为模态窗. 仅供子窗口使用. 默认值为`false`.
* `acceptFirstMouse`Boolean (可选) - 是否允许单击页面来激活窗口. 默认值为`false`.
* `disableAutoHideCursor`Boolean (可选) - 是否在输入时隐藏鼠标. 默认值为`false`.
* `autoHideMenuBar`Boolean (可选) - 自动隐藏菜单栏, 除非按了`Alt`键. 默认值为`false`.
* `enableLargerThanScreen`Boolean (optional) - Enable the window to be resized larger than screen. Only relevant for macOS, as other OSes allow larger-than-screen windows by default. 默认值为`false`.
* `backgroundColor`String(可选) - 窗口的背景颜色为十六进制值,例如`#66CD00`,`#FFF`,`#80FFFFFF`(设置`transparent`为`true`方可支持alpha属性,格式为#AARRGGBB)。 默认值为`#FFF`(白色)。
* `hasShadow`Boolean (可选) - 窗口是否有阴影. 仅在 macOS 上支持. 默认值为`true`.
* `opacity`Number (可选)-设置窗口初始的不透明度, 介于 0.0 (完全透明) 和 1.0 (完全不透明) 之间。仅支持 Windows 和 macOS 。
* `darkTheme`Boolean (可选) - 强制窗口使用 dark 主题, 只在一些拥有 GTK+3 桌面环境上有效. 默认值为`false`.
* `transparent`Boolean (optional) - Makes the window[transparent](https://www.electronjs.org/docs/api/frameless-window#transparent-window). 默认值为`false`. On Windows, does not work unless the window is frameless.
* `type`String (可选) - 窗口的类型, 默认为普通窗口. 下面可以查看更多.
* `titleBarStyle`String (可选) - 窗口标题栏的样式. 默认值为`default`. 可能的值有:
* `default`\- 标准灰色不透明的Mac标题栏
* `hidden`\- 隐藏标题栏, 内容充满整个窗口, 但它依然在左上角, 仍然受标准窗口控制.
* `hiddenInset`\- 隐藏标题栏, 显示小的控制按钮在窗口边缘
* `customButtonsOnHover`Boolean (可选) - 在macOS的无框窗口上绘制自定义的关闭与最小化按钮. 除非鼠标悬停到窗口的左上角, 否则这些按钮不会显示出来. 这些自定义的按钮能防止, 与发生于标准的窗口工具栏按钮处的鼠标事件相关的问题.**注意:**此选项目前是实验性的。
* `fullscreenWindowTitle`Boolean (可选) - 在 macOS 全屏模式时,为所有带`titleBarStyle`选项的标题栏显示标题。默认值为`false`。
* `thickFrame`Boolean(可选)-对 Windows 上的无框窗口使用`WS_THICKFRAME`样式,会增加标准窗口框架。 设置为`false`时将移除窗口的阴影和动画. 默认值为`true`。
* `vibrancy`String (可选) - 窗口是否使用 vibrancy 动态效果, 仅 macOS 中有效. Can be`appearance-based`,`light`,`dark`,`titlebar`,`selection`,`menu`,`popover`,`sidebar`,`medium-light`,`ultra-dark`,`header`,`sheet`,`window`,`hud`,`fullscreen-ui`,`tooltip`,`content`,`under-window`, or`under-page`. Please note that using`frame: false`in combination with a vibrancy value requires that you use a non-default`titleBarStyle`as well. Also note that`appearance-based`,`light`,`dark`,`medium-light`, and`ultra-dark`have been deprecated and will be removed in an upcoming version of macOS.
* `zoomToPageWidth`Boolean (可选) - 单击工具栏上的绿色信号灯按钮或单击 窗口>缩放 菜单项时的行为, 仅macOS中有效. 如果为`true`, 窗口将放大到网页的本身宽度,`false`将使其缩放到屏幕的宽度。 这也会影响直接调用`maximize()`时的行为。 默认值为`false`.
* `tabbingIdentifier`String (可选) - 选项组卡的名称,在macOS 10.12+上可使窗口在原生选项卡中打开. 具有相同标识符的窗口将被组合在一起。 这还会在窗口的标签栏中添加一个原生的新选项卡按钮, 并允许`app`和窗口接收`new-window-for-tab`事件。
* `webPreferences`Object (可选) - 网页功能的设置
* `devTools`Boolean (可选) - 是否开启 DevTools. 如果设置为`false`, 则无法使用`BrowserWindow.webContents.openDevTools ()`打开 DevTools。 默认值为`true`。
* `nodeIntegration`Boolean (可选) - 是否集成Node,默认为`false`。
* `nodeIntegrationInWorker`Boolean (可选) - 是否在Web工作器中启用了Node集成. 默认值为`false`. 更多内容参见[多线程](https://www.electronjs.org/docs/tutorial/multithreading).
* `nodeIntegrationInSubFrames`Boolean (可选项)(实验性),是否允许在子页面(iframe)或子窗口(child window)中集成Node.js; 预先加载的脚本会被注入到每一个iframe,你可以用`process.isMainFrame`来判断当前是否处于主框架(main frame)中。
* `preload`String (可选) -在页面运行其他脚本之前预先加载指定的脚本 无论页面是否集成Node, 此脚本都可以访问所有Node API 脚本路径为文件的绝对路径。 当 node integration 关闭时, 预加载的脚本将从全局范围重新引入node的全局引用标志[参考示例](https://www.electronjs.org/docs/api/process#event-loaded).
* `sandbox`Boolean (可选)-如果设置该参数, 沙箱的渲染器将与窗口关联, 使它与Chromium OS-level 的沙箱兼容, 并禁用 Node. js 引擎。 它与`nodeIntegration`的选项不同,且预加载脚本的 API 也有限制.[更多详情](https://www.electronjs.org/docs/api/sandbox-option).**注意:**改选项目前是为实验性质,可能会在 Electron 未来的版本中移除。
* `enableRemoteModule`Boolean(可选)- 是否启用[`Remote`](https://www.electronjs.org/docs/api/remote)模块。 默认值为`true`。
* `session`[Session](https://www.electronjs.org/docs/api/session#class-session)(可选) - 设置页面的 session 而不是直接忽略 Session 对象, 也可用`partition`选项来代替,它接受一个 partition 字符串. 同时设置了`session`和`partition`时,`session`的优先级更高. 默认使用默认的 session.
* `partition`String (optional) - 通过 session 的 partition 字符串来设置界面session. 如果`partition`以`persist:`开头, 该页面将使用持续的 session,并在所有页面生效,且使用同一个`partition`. 如果没有`persist:`前缀, 页面将使用 in-memory session. 通过分配相同的`partition`, 多个页可以共享同一会话。 默认使用默认的 session.
* `affinity`String (可选) - 当指定,具有相同`affinity`的 web页面将在相同的渲染进程运行。 需要注意的是,由于渲染过程中会有代码重用,如`webPreferences`的`preload`,`sandbox`和`nodeIntegration`等选项会在不同页面之间共用,即使你已经在不同页面中为同一选项设置过不同的值,它们仍会被共用。 因此,建议为`affinity`相同的页面,使用相同的`webPreferences`*这一选项当前是实验性的*
* `zoomFactor`Number (可选) - 页面的默认缩放系数,`3.0`表示`300%`. 默认值为`1.0`.
* `javascript`Boolean (可选) - 是否启用 JavaScript 支持. 默认值为`true`.
* `webSecurity`Boolean (可选) - 当设置为`false`, 它将禁用同源策略 (通常用来测试网站), 如果此选项不是由开发者设置的,还会把`allowRunningInsecureContent`设置为`true`. 默认值为`true`。
* `allowRunningInsecureContent`Boolean (可选) -允许一个 https 页面运行 http url 里的资源,包括 JavaScript, CSS 或 plugins. 默认值为`false`.
* `images`Boolean (可选) - 启动图像支持. 默认值为`true`.
* `textAreasAreResizable`Boolean (可选) - 让 TextArea 元素可以调整大小. 默认值为`true`.
* `webgl`Boolean (可选) - 启用 WebGL 支持. 默认值为`true`.
* `plugins`Boolean (可选) - 是否支持插件. 默认值为`false`.
* `experimentalFeatures`Boolean (optional) - 启用 Chromium 的实验功能. 默认值为`false`.
* `scrollBounce`Boolean (可选) - 在 macOS 启用弹力动画 (橡皮筋) 效果. 默认值为`false`.
* `enableBlinkFeatures`String(可选) - 以`逗号`分隔的需要启用的特性列表,譬如`CSSVariables,KeyboardEventKey`在[RuntimeEnabledFeatures.json5](https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/runtime_enabled_features.json5?l=70)文件中查看被支持的所有特性.
* `disableBlinkFeatures`String (可选) - 以`,`分隔的禁用特性列表, 如`CSSVariables,KeyboardEventKey`. 在[RuntimeEnabledFeatures.json5](https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/runtime_enabled_features.json5?l=70)文件中查看被支持的所有特性.
* `defaultFontFamily`Object (可选) - 设置 font-family 的默认字体.
* `standard`String (可选) - 默认值为`Times New Roman`.
* `serif`String (可选) - 默认值为`Times New Roman`.
* `sansSerif`String (可选) - 默认值为`Arial`.
* `monospace`String (可选) - 默认值为`Courier New`.
* `cursive`String (可选) - 默认值为`Script`.
* `fantasy`String (可选) - 默认值为`Impact`.
* `defaultFontSize`Integer (可选) - 默认值为`16`.
* `defaultMonospaceFontSize`Integer (可选) - 默认值为`13`.
* `minimumFontSize`Integer (可选) - 默认值为`0`.
* `defaultEncoding`String (可选) - 默认值为`ISO-8859-1`.
* `backgroundThrottling`Boolean (可选)-是否在页面成为背景时限制动画和计时器。 这也会影响到[Page Visibility API](https://www.electronjs.org/docs/api/browser-window#page-visibility). 默认值为`true`。
* `offscreen`Boolean (optional) - 是否绘制和渲染可视区域外的窗口. 默认值为`false`. 更多详情, 请参见[offscreen rendering tutorial](https://www.electronjs.org/docs/tutorial/offscreen-rendering)。
* `contextIsolation`Boolean (可选) - 是否在独立 JavaScript 环境中运行 Electron API和指定的`preload`脚本. 默认值为`false`.`preload`脚本的运行环境仍然可以访问`document`和`window`全局变量,但它将使用自己内置的函数 (如`Array`,`Object`,`JSON`等),并且将被加载的页面与对全局环境所做的任何更改隔离开来. Electron API 仅在`preload`脚本中有效,而不是加载的页面。 在加载可能不受信任的远程内容时, 应使用此选项, 以确保加载的内容不能篡改`preload`脚本和使用的 Electron APIs。 此选项使用[Chrome Content Scripts](https://developer.chrome.com/extensions/content_scripts#execution-environment)使用的相同技术。 通过在控制台选项卡顶部的组合框中选择 "Electron Isolated Context" 条目, 可以在开发工具中访问此上下文。
* `nativeWindowOpen`Boolean (可选) - 是否使用原生的`window.open()`. 默认值为`false`. Child windows will always have node integration disabled unless`nodeIntegrationInSubFrames`is true.**注意:**此选项目前是实验性的。
* `webviewTag`Boolean (可选) - 是否启用[`<webview>`tag](https://www.electronjs.org/docs/api/webview-tag)标签. 默认值为`false`.**注意:**为`< webview>`配置的`preload`脚本在执行时将启用节点集成, 因此应确保远程或不受信任的内容无法创建恶意的`preload`脚本 。 可以使用[webContents](https://www.electronjs.org/docs/api/web-contents)上的`will-attach-webview`事件对`preload`脚本进行剥离, 并验证或更改`<webview>`的初始设置。
* `additionalArguments`String\[\] (可选) - 一系列将会被附加至此app的渲染进程的`process.argv`的字符串. 对于将少量数据向下传至渲染进程的预加载脚本而言是十分实用的.
* `safeDialogs`Boolean (可选) - 是否启用浏览器样式的持续对话框保护。 缺省为`false`。
* `safeDialogsMessage`String (可选) - 当持续对话框保护被触发时显示的消息。 如果没有定义,那么将使用缺省的消息。注意:当前缺省消息是英文,并没有本地化。
* `navigateOnDragDrop`Boolean (可选) - 将文件或链接拖放到页面上时是否触发页面跳转. 默认为`false`.
* `autoplayPolicy`String (optional) - Autoplay policy to apply to content in the window, can be`no-user-gesture-required`,`user-gesture-required`,`document-user-activation-required`. Defaults to`no-user-gesture-required`.
* `disableHtmlFullscreenWindowResize`Boolean (optional) - Whether to prevent the window from resizing when entering HTML Fullscreen. Default is`false`.
当使用`minWidth`/`maxWidth`/`minHeight`/`maxHeight`设置最小或最大窗口大小时, 它只限制用户。 它不会阻止您将不符合大小限制的值传递给`setBounds`/`setSize`或`BrowserWindow`的构造函数。
`type`选项的可能值和行为与平台相关。可能的值为:
* 在 Linux 上, 可能的类型有`desktop`、`dock`、`toolbar`、`splash`、`notification`。
* 在 macOS, 可能的类型是`desktop`,`textured`.
* `textured`类型增加金属色泽的外观 (`NSTexturedBackgroundWindowMask`).
* `desktop`类型将窗口置于桌面背景级别 (`kCGDesktopWindowLevel - 1`). 注意,桌面窗口不会接收焦点、键盘或鼠标事件,但您可以使用 globalShortcut 接收快捷键的消息
* 在 Windows 上, 可能的类型为`toolbar`.
- npm
- 基础
- Api
- 安装
- node_modules本地安装与全局安装
- Inspector
- 模块
- hello world
- 使用nodejs开发桌面客户端应用
- Electron
- api
- 使用 Node.js 的 API
- 事件
- 安装
- 调试
- 读取本地文件
- 调用Html5的拖放api
- 官方示例下载
- WebView内嵌窗口
- window.open弹出子窗口及其操作
- BrowserWindow渲染主窗口
- 主进程与渲染进程的通信
- 菜单
- 网络
- 与react结合
- 打包
- 前言
- 对比
- electron-forge
- 打包工具一:electron-packager
- 打包工具二:electron-builder
- Boilerplates样板工程
- 通用配置文档
- NW.js
- 阿斯达岁的
- npm install、npm install --save与npm install --save-dev区别