UNPKG

quickbuild

Version:

A mature, feature-complete application generator with an emphasis on speed

122 lines (107 loc) 6.87 kB
<template class="task-template"> <section id="windows-section" class="section js-section u-category-windows"> <header class="section-header"> <div class="section-wrapper"> <h1> <svg class="section-icon"><use xlink:href="assets/img/icons.svg#icon-windows"></use></svg> Create and Manage Windows </h1> <h3>The <code>BrowserWindow</code> module in Electron allows you to create a new browser window or manage an existing one.</h3> <p>Each browser window is a separate process, known as the renderer process. This process, like the main process that controls the life cycle of the app, has full access to the Node.js APIs. <p>Open the <a href="http://electron.atom.io/docs/api/browser-window">full API documentation<span class="u-visible-to-screen-reader">(opens in new window)</span></a> in your browser.</p> </div> </header> <div class="demo"> <div class="demo-wrapper"> <button id="new-window-demo-toggle" class="js-container-target demo-toggle-button">Create a new window <div class="demo-meta u-avoid-clicks">Supports: Win, macOS, Linux <span class="demo-meta-divider">|</span> Process: Main</div> </button> <div class="demo-box"> <div class="demo-controls"> <button class="demo-button" id="new-window">View Demo</button> </div> <p>The <code>BrowserWindow</code> module gives you the ability to create new windows in your app. This main process module can be used from the renderer process with the <code>remote</code> module, as is shown in this demo.</p> <p>There are a lot of options when creating a new window. A few are in this demo, but visit the <a href="http://electron.atom.io/docs/api/browser-window">documentation<span class="u-visible-to-screen-reader">(opens in new window)</span></a> for the full list.</p> <h5>Renderer Process</h5> <pre><code data-path="renderer-process/windows/create-window.js"></code></pre> <div class="demo-protip"> <h2>ProTip</h2> <strong>Use an invisible browser window to run background tasks.</strong> <p>You can set a new browser window to not be shown (be invisible) in order to use that additional renderer process as a kind of new thread in which to run JavaScript in the background of your app. You do this by setting the <code>show</code> property to <code>false</code> when defining the new window.</p> <pre> <code class="language-js">var win = new BrowserWindow({ width: 400, height: 225, show: false })</code></pre> </div> </div> </div> </div> <div class="demo"> <div class="demo-wrapper"> <button id="manage-window-demo-toggle" class="js-container-target demo-toggle-button">Manage window state <div class="demo-meta u-avoid-clicks">Supports: Win, macOS, Linux <span class="demo-meta-divider">|</span> Process: Main</div> </button> <div class="demo-box"> <div class="demo-controls"> <button class="demo-button" id="manage-window">View Demo</button> <span class="demo-response" id="manage-window-reply"></span> </div> <p>In this demo we create a new window and listen for <code>move</code> and <code>resize</code> events on it. Click the demo button, change the new window and see the dimensions and position update here, above.</p> <p>There are a lot of methods for controlling the state of the window such as the size, location, and focus status as well as events to listen to for window changes. Visit the <a href="http://electron.atom.io/docs/api/browser-window">documentation<span class="u-visible-to-screen-reader">(opens in new window)</span></a> for the full list.</p> <h5>Renderer Process</h5> <pre><code data-path="renderer-process/windows/manage-window.js"></code></pre> </div> </div> </div> <div class="demo"> <div class="demo-wrapper"> <button id="using-window-events-demo-toggle" class="js-container-target demo-toggle-button">Window events: blur and focus <div class="demo-meta u-avoid-clicks">Supports: Win, macOS, Linux <span class="demo-meta-divider">|</span> Process: Main</div> </button> <div class="demo-box"> <div class="demo-controls"> <button class="demo-button" id="listen-to-window">View Demo</button> <button class="demo-button disappear" id="focus-on-modal-window">Focus on Demo</button> </div> <p>In this demo, we create a new window and listen for <code>blur</code> event on it. Click the demo button to create a new modal window, and switch focus back to the parent window by clicking on it. You can click the <i>Focus on Demo</i> button to switch focus to the modal window again.</p> <h5>Renderer Process</h5> <pre><code data-path="renderer-process/windows/using-window-events.js"></code></pre> </div> </div> </div> <div class="demo"> <div class="demo-wrapper"> <button class="js-container-target demo-toggle-button">Create a frameless window <div class="demo-meta u-avoid-clicks">Supports: Win, macOS, Linux <span class="demo-meta-divider">|</span> Process: Main</div> </button> <div class="demo-box"> <div class="demo-controls"> <button class="demo-button" id="frameless-window">View Demo</button> </div> <p> A frameless window is a window that has no <a href="https://developer.mozilla.org/en-US/docs/Glossary/Chrome">"chrome"</a>, such as toolbars, title bars, status bars, borders, etc. You can make a browser window frameless by setting <code>frame</code> to <code>false</code> when creating the window. </p> <h5>Renderer Process</h5> <pre><code data-path="renderer-process/windows/frameless-window.js"></code></pre> <p>Windows can have a transparent background, too. By setting the <code>transparent</code> option to <code>true</code>, you can also make your frameless window transparent:</p> <pre> <code class="language-js">var win = new BrowserWindow({ transparent: true, frame: false })</code></pre> <p> For more details, see the <a href="http://electron.atom.io/docs/api/frameless-window/">Frameless Window</a> documentation. </p> </div> </div> </div> <script type="text/javascript"> require('./renderer-process/windows/create-window') require('./renderer-process/windows/manage-window') require('./renderer-process/windows/using-window-events') require('./renderer-process/windows/frameless-window') </script> </section> </template>