remove deprecated docs translations

This commit is contained in:
Zeke Sikelianos 2017-11-06 15:48:47 -08:00
parent 11957b62bb
commit 5e0fe575c9
392 changed files with 0 additions and 45142 deletions

View file

@ -1,99 +0,0 @@
Ujistěte se, že budete používat dokumenty, které jsou určeny pro verzi Electronu, který používáte.
Číslo verze by měla být součástí adresy URL stránky. Pokud tomu tak není, pravděpodobně používáte
dokumentaci vývojové větve, která může obsahovat změny v API, a ty nejsou kompatibilní s vaší verzí Electronu.
Chcete-li zobrazit starší verze dokumentace, můžete je procházet podle tagů na GitHub, a to otevřením "přepínač větve / tagu", který odpovídá vaší verzi.
## FAQ / Často kladené dotazy
There are questions that are asked quite often. Check this out before creating
an issue:
* [Electron FAQ](faq.md)
## Návody
* [Supported Platforms](tutorial/supported-platforms.md)
* [Security](tutorial/security.md)
* [Electron Versioning](tutorial/electron-versioning.md)
* [Application Distribution](tutorial/application-distribution.md)
* [Mac App Store Submission Guide](tutorial/mac-app-store-submission-guide.md)
* [Windows Store Guide](tutorial/windows-store-guide.md)
* [Application Packaging](tutorial/application-packaging.md)
* [Using Native Node Modules](tutorial/using-native-node-modules.md)
* [Debugging Main Process](tutorial/debugging-main-process.md)
* [Using Selenium and WebDriver](tutorial/using-selenium-and-webdriver.md)
* [DevTools Extension](tutorial/devtools-extension.md)
* [Using Pepper Flash Plugin](tutorial/using-pepper-flash-plugin.md)
* [Using Widevine CDM Plugin](tutorial/using-widevine-cdm-plugin.md)
* [Testing on Headless CI Systems (Travis, Jenkins)](tutorial/testing-on-headless-ci.md)
* [Offscreen Rendering](tutorial/offscreen-rendering.md)
## Tutoriály
* [Quick Start](tutorial/quick-start.md)
* [Desktop Environment Integration](tutorial/desktop-environment-integration.md)
* [Online/Offline Event Detection](tutorial/online-offline-events.md)
* [REPL](tutorial/repl.md)
## API Reference
* [Synopsis](api/synopsis.md)
* [Process Object](api/process.md)
* [Supported Chrome Command Line Switches](api/chrome-command-line-switches.md)
* [Environment Variables](api/environment-variables.md)
### Volitelné DOM Elementy:
* [`File` Object](api/file-object.md)
* [`<webview>` Tag](api/web-view-tag.md)
* [`window.open` Function](api/window-open.md)
### Moduly pro Main Process:
* [app](api/app.md)
* [autoUpdater](api/auto-updater.md)
* [BrowserWindow](api/browser-window.md)
* [contentTracing](api/content-tracing.md)
* [dialog](api/dialog.md)
* [globalShortcut](api/global-shortcut.md)
* [ipcMain](api/ipc-main.md)
* [Menu](api/menu.md)
* [MenuItem](api/menu-item.md)
* [net](api/net.md)
* [powerMonitor](api/power-monitor.md)
* [powerSaveBlocker](api/power-save-blocker.md)
* [protocol](api/protocol.md)
* [session](api/session.md)
* [systemPreferences](api/system-preferences.md)
* [Tray](api/tray.md)
* [webContents](api/web-contents.md)
### Moduly pro Renderer Process (Web Page):
* [desktopCapturer](api/desktop-capturer.md)
* [ipcRenderer](api/ipc-renderer.md)
* [remote](api/remote.md)
* [webFrame](api/web-frame.md)
### Moduly pro Both Processes:
* [clipboard](api/clipboard.md)
* [crashReporter](api/crash-reporter.md)
* [nativeImage](api/native-image.md)
* [screen](api/screen.md)
* [shell](api/shell.md)
## Vývoj
* [Coding Style](development/coding-style.md)
* [Using clang-format on C++ Code](development/clang-format.md)
* [Source Code Directory Structure](development/source-code-directory-structure.md)
* [Technical Differences to NW.js (formerly node-webkit)](development/atom-shell-vs-node-webkit.md)
* [Build System Overview](development/build-system-overview.md)
* [Build Instructions (macOS)](development/build-instructions-osx.md)
* [Build Instructions (Windows)](development/build-instructions-windows.md)
* [Build Instructions (Linux)](development/build-instructions-linux.md)
* [Debug Instructions (macOS)](development/debugging-instructions-macos.md)
* [Debug Instructions (Windows)](development/debug-instructions-windows.md)
* [Setting Up Symbol Server in debugger](development/setting-up-symbol-server.md)
* [Documentation Styleguide](styleguide.md)

View file

@ -1,43 +0,0 @@
# Vereinbarung über Verhaltenskodex für Mitwirkende
## Unsere Verpflichtung
Im Interesse der Förderung eines offenen und einladenden Umfeldes wollen wir uns als Teilnehmer und Verantwortliche unseres Projektes verpflichten die Teilnahme an dem Projekt und unserer Gemeinschaft zu einer belästigungsfreien Erfahrung zu machen unabhängig von Alter, Körpergröße, Behinderung, ethnischer Zuordnung, geschlechtlicher Identität und Ausdruck, Erfahrungsstufe, Nationalität, persönlicher Erscheinung, Rasse, Religion oder sexueller Identität oder Orientierung.
## Unsere Standards
Beispiele für Verhaltensweisen, welche dazu beitragen ein positives Umfeld zu erzeugen, beinhalten:
* Die Verwendung von einladenden und einbindenden Formulierungen
* Abweichenden Ansichten und Erfahrungen wird Respekt entgegengebracht
* Konstruktive Kritik wird höflich entgegengenommen
* Fokussierung auf das, was das Beste ist für die Gemeinschaft
* Verständnis zeigen gegenüber anderen Mitgliedern der Gemeinschaft
Beispiele für nicht akzeptables Verhalten beinhalten:
* Die Verwendung sexualisierter Sprache, Bilder oder Symbolik sowie unerwünschte Versuche sexueller Anbahnung
* Beleidigende / abwertende Kommentare, persönliche oder politische Angriffe, Nutzung des Internets für unbilliges Verhalten
* Öffentliche oder private Belästigungen
* Das Veröffentlichen von privaten Informationen Anderer, wie zum Beispiel physische oder elektronische Adressen, ohne deren ausdrückliche Erlaubnis
* Anderes Verhalten, welches in einem professionellen Umfeld begründet als unangemessen betrachtet werden kann
## Unsere Verantwortlichkeiten
Die Projektverantwortlichen sind verantwortlich dafür, die Standards für ein akzeptables Benehmen klarzustellen und es wird von ihnen erwartet, dass sie als Reaktion auf jegliches inakzeptables Verhalten passende und faire berichtigende Maßnahmen ergreifen.
Die Projektverantwortlichen haben das Recht und die Verantwortung, Kommentare, Commits, Code, Wiki-Bearbeitungen, Support-Tickets und andere Beiträge, die nicht mit diesem Verhaltenskodex vereinbar sind, zu entfernen, zu bearbeiten oder abzulehnen, und jene Mitwirkende für Verhaltensweisen, die sie für unangemessen, bedrohend, beleidigend oder verletzend halten, zeitweilig oder dauerhaft zu sperren.
## Geltungsbereich
Dieser Verhaltenskodex gilt sowohl innerhalb des Projektbereichs als auch in öffentlichen Bereichen, wenn eine Person das Projekt oder seine Gemeinschaft repräsentiert. Beispiele für die Repräsentation eines Projektes oder der Gemeinschaft beinhalten die Verwendung einer offiziellen Projekt-E-Mail-Adresse, das Versenden von Nachrichten über einen öffentlichen Social-Media-Account oder das Handeln als Repräsentant während einer Online- oder Offline-Veranstaltung. Der Begriff "Repräsentation des Projektes" kann durch die Projektenverantwortlichen weiter ausformuliert und klargestellt werden.
## Umsetzung
Fälle von missbräuchlichem, belästigendem oder anderweitig nicht akzeptablem Verhalten können dem Projektteam unter [EMAIL ADRESSE EINFÜGEN] gemeldet werden. Alle Beschwerden werden geprüft und untersucht und werden zu einer Antwort führen, die angesichts der Umstände für notwendig und angemessen gehalten wird. Das Projektteam ist verpflichtet, über diejenigen, die Vorfälle gemeldet haben, Verschwiegenheit zu wahren. Weitere Einzelheiten zu speziellen Umsetzungsgrundsätzen können gesondert mitgeteilt werden.
Projektverantwortliche, welche den Verhaltenskodex nicht befolgen, oder nicht nach bestem Wissen und Glauben für dessen Einhaltung sorgen, können sich vorübergehenden oder dauerhaften Auswirkungen gegenübersehen, die durch andere Mitglieder der Projektleitung bestimmt wurden.
## Bezug
Dieser Verhaltenskodex basiert auf dem Contributor Covenant, Version 1.4, verfügbar unter http://contributor-covenant.org/version/1/4/de/

View file

@ -1,83 +0,0 @@
[![Electron Logo](https://electron.atom.io/images/electron-logo.svg)](https://electron.atom.io/)
[![Travis Build Status](https://travis-ci.org/electron/electron.svg?branch=master)](https://travis-ci.org/electron/electron)
[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/bc56v83355fi3369/branch/master?svg=true)](https://ci.appveyor.com/project/electron-bot/electron/branch/master)
[![devDependency Status](https://david-dm.org/electron/electron/dev-status.svg)](https://david-dm.org/electron/electron?type=dev)
[![Join the Electron Community on Slack](http://atom-slack.herokuapp.com/badge.svg)](http://atom-slack.herokuapp.com/)
:memo: Verfügbare Sprachen: [Korean](https://github.com/electron/electron/tree/master/docs-translations/ko-KR/project/README.md) | [Simplified Chinese](https://github.com/electron/electron/tree/master/docs-translations/zh-CN/project/README.md) | [Brazilian Portuguese](https://github.com/electron/electron/tree/master/docs-translations/pt-BR/project/README.md) | [Traditional Chinese](https://github.com/electron/electron/tree/master/docs-translations/zh-TW/project/README.md) | [Spanish](https://github.com/electron/electron/tree/master/docs-translations/es/project/README.md) | [Turkish](https://github.com/electron/electron/tree/master/docs-translations/tr-TR/project/README.md) | [German](https://github.com/electron/electron/tree/master/docs-translations/de-DE/project/README.md)
Electron ermöglicht die Entwicklung plattformunabhängiger Desktopanwendungen mit JavaScript, HTML und CSS. Electron basiert auf [Node.js](https://nodejs.org/) und
[Chromium](http://www.chromium.org) und wird vom [Editor Atom](https://github.com/atom/atom) und vielen anderen [Apps](https://electron.atom.io/apps) verwendet.
Folge [@ElectronJS](https://twitter.com/electronjs) auf Twitter, um stets auf dem neuesten Stand zu sein und Informationen zu Electron sofort zu erhalten.
Dieses Projekt hält sich an den *Contributor Covenant*, einem [Verhaltenskodex](https://github.com/electron/electron/tree/master/docs-translations/de-DE/project/CODE_OF_CONDUCT.md) für Open Source Projekte.
Beim Mitwirken an Electron wird vorausgesetzt, dass sich an diesen Kodex gehalten wird. Unangebrachtes Verhalten kann bei electron@github.com gemeldet werden.
## Downloads
Binaries von Electron können mit
[`npm`](https://docs.npmjs.com/)
installiert werden:
```sh
# Als Dependency für die Entwicklung installieren
npm install electron --save-dev
# `electron` Befehl global im $PATH installieren
npm install electron -g
```
Auf der [Release Page](https://github.com/electron/electron/releases) können Binaries, Debugging Symbole und mehr gefunden werden.
### Mirrors
- [China](https://npm.taobao.org/mirrors/electron)
## Dokumentation
Guides und API Dokumentation befinden sich in der [Docs](https://github.com/electron/electron/tree/master/docs) Directory. Sie enthält auch Dokumente, die beschreiben, wie Electron kompiliert wird und wie mitgearbeitet werden kann.
## Übersetzungen der Dokumentation
- [Brazilian Portuguese](https://github.com/electron/electron/tree/master/docs-translations/pt-BR)
- [Korean](https://github.com/electron/electron/tree/master/docs-translations/ko-KR)
- [Japanese](https://github.com/electron/electron/tree/master/docs-translations/jp)
- [Spanish](https://github.com/electron/electron/tree/master/docs-translations/es)
- [Simplified Chinese](https://github.com/electron/electron/tree/master/docs-translations/zh-CN)
- [Traditional Chinese](https://github.com/electron/electron/tree/master/docs-translations/zh-TW)
- [Turkish](https://github.com/electron/electron/tree/master/docs-translations/tr-TR)
- [Thai](https://github.com/electron/electron/tree/master/docs-translations/th-TH)
- [Ukrainian](https://github.com/electron/electron/tree/master/docs-translations/uk-UA)
- [Russian](https://github.com/electron/electron/tree/master/docs-translations/ru-RU)
- [French](https://github.com/electron/electron/tree/master/docs-translations/fr-FR)
- [Indonesian](https://github.com/electron/electron/tree/master/docs-translations/id)
## Quick Start
Um eine minimale Version einer Electron App in Aktion zu sehen, kann
[`electron/electron-quick-start`](https://github.com/electron/electron-quick-start) geklont und ausgeführt werden.
## Community
Für Fragen und Interaktion mit der Community stehen folgende Optionen zur Verfügung:
- [`electron`](http://discuss.atom.io/c/electron) Kategorie im Atom Forum
- `#atom-shell` Channel auf Freenode
- [`Atom`](http://atom-slack.herokuapp.com/) Channel bei Slack
- [`electron-ru`](https://telegram.me/electron_ru) *(Russisch)*
- [`electron-br`](https://electron-br.slack.com) *(Brasilianisch Portugiesisch)*
- [`electron-kr`](http://www.meetup.com/electron-kr/) *(Koreanisch)*
- [`electron-jp`](https://electron-jp.slack.com) *(Japanisch)*
- [`electron-tr`](http://electron-tr.herokuapp.com) *(Türkisch)*
- [`electron-id`](https://electron-id.slack.com) *(Indonesisch)*
Auf [awesome-electron](https://github.com/sindresorhus/awesome-electron)
findest du eine Sammlung an nützlichen Beispielanwendungen, Tools und Ressourcen.
## Lizenz
[MIT](https://github.com/electron/electron/blob/master/LICENSE)
Bei der Benutzung von Electron oder anderen GitHub Logos ist sich an die [GitHub Logo Guidelines](https://github.com/logos) zu halten.

View file

@ -1,71 +0,0 @@
## Guías
* [Plataformas Soportadas](tutorial/supported-platforms.md)
* [Distribución de la Aplicación](tutorial/application-distribution.md)
* [Empaquetamiento de la Aplicación](tutorial/application-packaging.md)
* [Utilizando Módulos Node Nativos](tutorial/using-native-node-modules.md)
* [Depurando el Proceso Principal](tutorial/debugging-main-process.md)
* [Utilizando Selenium y WebDriver](tutorial/using-selenium-and-webdriver.md)
* [Extensión DevTools](tutorial/devtools-extension.md)
* [Utilizando el plugin Pepper Flash](tutorial/using-pepper-flash-plugin.md)
## Tutoriales
* [Introducción](tutorial/quick-start.md)
* [Integración con el entorno de escritorio](tutorial/desktop-environment-integration.md)
* [Detección del evento en línea/fuera de línea](tutorial/online-offline-events.md)
## Referencias a la API
* [Sinopsis](api/synopsis.md)
* [Proceso](api/process.md)
* [Parámetros CLI soportados (Chrome)](api/chrome-command-line-switches.md)
### Elementos DOM personalizados:
* [Objeto `File`](../../docs/api/file-object.md)
* [Etiqueta `<webview>`](../../docs/api/webview-tag.md)
* [Función `window.open`](../../docs/api/window-open.md)
### Módulos del Proceso Principal:
* [app](../../docs/api/app.md)
* [auto-updater](../../docs/api/auto-updater.md)
* [browser-window](../../docs/api/browser-window.md)
* [content-tracing](../../docs/api/content-tracing.md)
* [dialog](../../docs/api/dialog.md)
* [global-shortcut](../../docs/api/global-shortcut.md)
* [ipc (proceso principal)](../../docs/api/ipc-main.md)
* [menu](../../docs/api/menu.md)
* [menu-item](../../docs/api/menu-item.md)
* [power-monitor](../../docs/api/power-monitor.md)
* [power-save-blocker](../../docs/api/power-save-blocker.md)
* [protocol](../../docs/api/protocol.md)
* [session](../../docs/api/session.md)
* [web-contents](../../docs/api/web-contents.md)
* [tray](../../docs/api/tray.md)
### Módulos del proceso de renderizado (Página Web):
* [ipc (renderizador)](../../docs/api/ipc-renderer.md)
* [remote](../../docs/api/remote.md)
* [web-frame](../../docs/api/web-frame.md)
### Módulos de Ambos Procesos:
* [clipboard](../../docs/api/clipboard.md)
* [crash-reporter](../../docs/api/crash-reporter.md)
* [native-image](../../docs/api/native-image.md)
* [screen](../../docs/api/screen.md)
* [shell](../../docs/api/shell.md)
## Desarrollo
* [Guía de Estilo](development/coding-style.md)
* [Estructura de los directorios del Código Fuente](development/source-code-directory-structure.md)
* [Diferencias Técnicas con NW.js (anteriormente conocido como node-webkit)](development/atom-shell-vs-node-webkit.md)
* [Repaso del Sistema de Compilación](development/build-system-overview.md)
* [Instrucciones de Compilación (macOS)](development/build-instructions-osx.md)
* [Instrucciones de Compilación (Windows)](development/build-instructions-windows.md)
* [Instrucciones de Compilación (Linux)](development/build-instructions-linux.md)
* [Configurando un Servidor de Símbolos en el depurador](development/setting-up-symbol-server.md)

View file

@ -1,114 +0,0 @@
# Parámetros CLI soportados (Chrome)
Esta página lista las líneas de comandos usadas por el navegador Chrome que también son
soportadas por Electron. Puedes usar [app.commandLine.appendSwitch][append-switch] para
anexarlas en el script principal de tu aplicación antes de que el evento [ready][ready] del
módulo [app][app] sea emitido:
```javascript
var app = require('app')
app.commandLine.appendSwitch('remote-debugging-port', '8315')
app.commandLine.appendSwitch('host-rules', 'MAP * 127.0.0.1')
app.on('ready', function () {
// Your code here
})
```
## --client-certificate=`path`
Establece el `path` del archivo de certificado del cliente.
## --ignore-connections-limit=`domains`
Ignora el límite de conexiones para la lista de `domains` separados por `,`.
## --disable-http-cache
Deshabilita la caché del disco para las peticiones HTTP.
## --remote-debugging-port=`port`
Habilita la depuración remota a través de HTTP en el puerto especificado.
## --proxy-server=`address:port`
Usa un servidor proxy especificado, que sobreescribe la configuración del sistema.
Este cambio solo afecta peticiones HTTP y HTTPS.
## --proxy-pac-url=`url`
Utiliza el script PAC en la `url` especificada.
## --no-proxy-server
No usa un servidor proxy y siempre establece conexiones directas. Anula cualquier
otra bandera de servidor proxy bandera que se pase.
## --host-rules=`rules`
Una lista separada por comas de `rules` (reglas) que controlan cómo se asignan los
nombres de host.
Por ejemplo:
* `MAP * 127.0.0.1` Obliga a todos los nombres de host a ser asignados a 127.0.0.1
* `MAP *.google.com proxy` Obliga todos los subdominios google.com a resolverse con
"proxy".
* `MAP test.com [::1]:77` Obliga a resolver "test.com" con un bucle invertido de IPv6.
También obligará a que el puerto de la dirección respuesta sea 77.
* `MAP * baz, EXCLUDE www.google.com` Reasigna todo a "baz", excepto a "www.google.com".
Estas asignaciones especifican el host final en una petición de red (Anfitrión de la conexión TCP
y de resolución de conexión directa, y el `CONNECT` en una conexión proxy HTTP, y el host final de
la conexión proxy `SOCKS`).
## --host-resolver-rules=`rules`
Como `--host-rules` pero estas `rules` solo se aplican al solucionador.
[app]: app.md
[append-switch]: app.md#appcommandlineappendswitchswitch-value
[ready]: app.md#event-ready
## --ignore-certificate-errors
Ignora errores de certificado relacionados.
## --ppapi-flash-path=`path`
Asigna la ruta `path` del pepper flash plugin.
## --ppapi-flash-version=`version`
Asigna la versión `version` del pepper flash plugin.
## --log-net-log=`path`
Permite guardar y escribir eventos de registros de red en `path`.
## --enable-logging
Imprime el registro de Chromium en consola.
Este cambio no puede ser usado en `app.commandLine.appendSwitch` ya que se analiza antes de que la
aplicación del usuario esté cargada.
## --v=`log_level`
Da el máximo nivel activo de V-logging por defecto; 0 es el predeterminado. Valores positivos
son normalmente usados para los niveles de V-logging.
Este modificador sólo funciona cuando también se pasa `--enable-logging`.
## --vmodule=`pattern`
Da los niveles máximos de V-logging por módulo para sobreescribir el valor dado por
`--v`. Ej. `my_module=2,foo*=3` cambiaría el nivel de registro para todo el código,
los archivos de origen `my_module.*` y `foo*.*`.
Cualquier patrón que contiene un slash o un slash invertido será probado contra toda la ruta
y no sólo con el módulo. Ej. `*/foo/bar/*=2` cambiaría el nivel de registro para todo el código
en los archivos origen bajo un directorio `foo/bar`.
Este modificador sólo funciona cuando también se pasa `--enable-logging`.

View file

@ -1,47 +0,0 @@
# process
El objeto `process` en Electron tiene las siguientes diferencias con respecto
al node convencional:
* `process.type` String - El tipo del proceso puede ser `browser` (ej. proceso
principal) o `renderer`.
* `process.versions.electron` String - Versión de Electron.
* `process.versions.chrome` String - Versión de Chromium.
* `process.resourcesPath` String - Ruta al código fuente JavaScript.
## Events
### Event: 'loaded'
Se emite cuando Electron ha cargado su script de inicialización interna y
está comenzando a cargar la página web o el script principal.
Puede ser usado por el script precargado para añadir de nuevo los símbolos globales
de Node eliminados, al alcance global cuando la integración de Node está apagada:
```javascript
// preload.js
var _setImmediate = setImmediate
var _clearImmediate = clearImmediate
process.once('loaded', function () {
global.setImmediate = _setImmediate
global.clearImmediate = _clearImmediate
})
```
## Methods
El objeto `process` tiene los siguientes métodos:
### `process.hang`
Interrumpe el hilo principal del proceso actual.
### process.setFdLimit(maxDescriptors) _macOS_ _Linux_
* `maxDescriptors` Integer
Establece el límite dinámico del descriptor del archivo en `maxDescriptors`
o en el límite estricto del Sistema Operativo, el que sea menor para el
proceso actual.

View file

@ -1,47 +0,0 @@
# Sinopsis
Todos los [Módulos integrados de Node.js](http://nodejs.org/api/) se encuentran
disponibles en Electron y módulos de terceros son támbien totalmente compatibles
(incluyendo los [módulos nativos](../tutorial/using-native-node-modules.md)).
Electron también provee algunos módulos integrados adicionales para desarrollar
aplicaciones nativas de escritorio. Algunos módulos sólo se encuentran disponibles
en el proceso principal, algunos sólo en el proceso renderer (página web), y
algunos pueden ser usados en ambos procesos.
La regla básica es: Si un módulo es
[GUI](https://es.wikipedia.org/wiki/Interfaz_gráfica_de_usuario) o de bajo nivel,
entonces solo estará disponible en el proceso principal. Necesitas familiarizarte
con el concepto de [scripts para proceso principal vs scripts para proceso renderer]
(../tutorial/quick-start.md#the-main-process) para ser capaz de usar esos módulos.
El script del proceso principal es como un script normal de Node.js:
```javascript
var app = require('app')
var BrowserWindow = require('browser-window')
var window = null
app.on('ready', function () {
window = new BrowserWindow({width: 800, height: 600})
window.loadURL('https://github.com')
})
```
El proceso renderer no es diferente de una página web normal, excepto por la
capacidad extra de utilizar módulos de node:
```html
<!DOCTYPE html>
<html>
<body>
<script>
var remote = require('remote');
console.log(remote.require('app').getVersion());
</script>
</body>
</html>
```
Para ejecutar tu aplicación, lee [Ejecutar la aplicación](../tutorial/quick-start.md#run-your-app).

View file

@ -1,34 +0,0 @@
#Diferencias Técnicas entre Electron y NW.js (anteriormente conocido como node-webkit)
**Nota:Electron se llamaba antes Atom Shell.**
Como NW.js, Electron proporciona una plataforma para escribir aplicaciones de escritorio con JavaScript y HTML y tiene la integración de nodo para permitir el acceso al sistema de bajo nivel de las páginas web.
Pero también hay diferencias fundamentales entre los dos proyectos que hacen a Electron un producto totalmente independiente de NW.js:
**1. Ingreso a la aplicación**
En NW.js el principal punto de ingreso de una aplicación es una página web. Usted especifica una página principal de URL en el `package.json` y se abre en una ventana del navegador como ventana principal de la aplicación.
En Electron, el punto de ingreso es un script de JavaScript. En lugar de proporcionar una dirección URL directamente, usted crea manualmente una ventana del navegador y carga un archivo HTML utilizando la API. También es necesario escuchar a los eventos de la ventana para decidir cuándo salir de la aplicación.
Electron funciona más como el tiempo de ejecución(Runtime) de Node.js. Las Api's de Electron son de bajo nivel asi que puede usarlo para las pruebas del navegador en lugar de usar [PhantomJS.](http://phantomjs.org/)
**2.Construir un sistema**
Con el fin de evitar la complejidad de la construcción de todo Chromium, Electron utiliza `libchromiumcontent` para acceder a al contenido Chromium's API. `libchromiumcontent` es solo una liberia compartida que incluye el módulo de contenido de Chromium y todas sus dependencias. Los usuarios no necesitan una máquina potente para construir con Electron.
**3.Integración de Node**
In NW.js, the Node integration in web pages requires patching Chromium to work, while in Electron we chose a different way to integrate the libuv loop with each platform's message loop to avoid hacking Chromium. See the node_bindings code for how that was done.
En NW.js, la integración de Node en las páginas web requiere parchear Chromium para que funcione, mientras que en Electron elegimos una manera diferente para integrar el cilco libuv con cada ciclo de mensaje de las plataformas para evitar el hacking en Chromium. Ver el código [`node_bindings`][node-bindings] de cómo se hizo.
**4. Multi-contexto**
Si usted es un usuario experimentado NW.js, usted debe estar familiarizado con el concepto de contexto Node y el contexto web. Estos conceptos fueron inventados debido a la forma cómo se implementó NW.js.
Mediante el uso de la característica [multi-contexto](http://strongloop.com/strongblog/whats-new-node-js-v0-12-multiple-context-execution/) de Node, Electron no introduce un nuevo contexto JavaScript en páginas web.Resultados de búsqueda
[node-bindings]: https://github.com/electron/electron/tree/master/atom/common

View file

@ -1,104 +0,0 @@
#Instrucciones de Compilación (Linux)
Siga las siguientes pautas para la construcción de Electron en Linux.
#Requisitos previos
* Python 2.7.x. Algunas distribuciones como CentOS 6.x siguen utilizando Python 2.6.x por lo que puede que tenga que comprobar su versión de Python con `Python -V`.
* Node.js v0.12.x. Hay varias formas de instalar Node. Puede descargar el código fuente de Node.js y compilar desde las fuentes. Si lo hace, permite la instalación de Node en el directorio personal como usuario estándar. O intentar de repositorios como NodeSource.
* Clang 3.4 o mayor.
* Cabeceras de desarrollo de GTK + y libnotify.
En Ubuntu, instalar las siguientes bibliotecas:
`$ sudo apt-get install build-essential clang libdbus-1-dev libgtk2.0-dev \
libnotify-dev libgnome-keyring-dev libgconf2-dev \
libasound2-dev libcap-dev libcups2-dev libxtst-dev \
libxss1 libnss3-dev gcc-multilib g++-multilib`
En RHEL / CentOS, instale las siguientes bibliotecas:
`$ sudo yum install clang dbus-devel gtk2-devel libnotify-devel \
libgnome-keyring-devel xorg-x11-server-utils libcap-devel \
cups-devel libXtst-devel alsa-lib-devel libXrandr-devel \
GConf2-devel nss-devel`
En Fedora, instale las siguientes bibliotecas:
`$ sudo dnf install clang dbus-devel gtk2-devel libnotify-devel \
libgnome-keyring-devel xorg-x11-server-utils libcap-devel \
cups-devel libXtst-devel alsa-lib-devel libXrandr-devel \
GConf2-devel nss-devel`
Otras distribuciones pueden ofrecer paquetes similares para la instalación, a través de gestores de paquetes como el pacman. O puede compilarlo a partir del código fuente.
#Si utiliza máquinas virtuales para la construcción
Si usted planea construir Electron en una máquina virtual, necesitará un dispositivo de al menos 25 gigabytes de tamaño.
#Obteniendo el codigo
`$ git clone https://github.com/electron/electron.git`
#Bootstrapping (Arranque)
The bootstrap script will download all necessary build dependencies and create the build project files. You must have Python 2.7.x for the script to succeed. Downloading certain files can take a long time. Notice that we are using ninja to build Electron so there is no Makefile generated.
El script de bootstrap descargará todas las dependencias necesarias para construcción y creara los archivos del proyecto de construcción. Debe tener Python 2.7.x para que la secuencia de comandos tenga éxito. La descarga de determinados archivos puede llevar mucho tiempo. Nótese que estamos usando`ninja` para construir Electron por lo que no hay `Makefile` generado.
$ cd electron
$ ./script/bootstrap.py -v
#compilación cruzada
Si usted quiere construir para un `arm` objetivo también debe instalar las siguientes dependencias:
`$ sudo apt-get install libc6-dev-armhf-cross linux-libc-dev-armhf-cross \ g++-arm-linux-gnueabihf`
And to cross compile for arm or ia32 targets, you should pass the --target_arch parameter to the bootstrap.py script:
cruzar y compilar para `arm` o `ia32` objetivos, debe pasar el parámetro `--target_arch` al script `bootstrap.py`:
`$ ./script/bootstrap.py -v --target_arch=arm`
#Construcción
Si a usted le gustaría construir dos objetivos de `Release` y `Debug`:
`$ ./script/build.py`
Este script causará que el ejecutable de Electron se muy grande para ser colocado en el directorio `out / R`. El tamaño del archivo es de más de 1,3 gigabytes. Esto sucede porque el binario de destino lanzamiento contiene los símbolos de depuración. Para reducir el tamaño de archivo, ejecute el script `create-dist.py`:
`$ ./script/create-dist.py`
This will put a working distribution with much smaller file sizes in the dist directory. After running the create-dist.py script, you may want to remove the 1.3+ gigabyte binary which is still in out/R.
Esto pondrá una distribución a trabajar con tamaños de archivo mucho más pequeños en el directorio `dist`. Después de ejecutar el script create-dist.py, es posible que desee quitar el binario 1.3+ gigabyte que todavía está en `out/R`.
También se puede construir sólo el objetivo `Debug`:
`$ ./script/build.py -c D`
Después de la construcción está hecho, usted puede encontrar el `Electron` de depuración binario bajo `out / D`.
#Limpieza
Para limpiar los archivos de creación:
`$ ./script/clean.py`
#Solución de problemas
Asegúrese de que ha instalado todas las dependencias de construcción.
#Error al cargar bibliotecas compartidas: libtinfo.so.5
Prebulit clang will try to link to libtinfo.so.5. Depending on the host architecture, symlink to appropriate libncurses:
preconstruir `clang` intentará enlazar a `libtinfo.so.5`. Dependiendo de la arquitectura anfitrión, enlace simbólico apropiado a `libncurses` :
`$ sudo ln -s /usr/lib/libncurses.so.5 /usr/lib/libtinfo.so.5`
#Pruebas
Pon a prueba tus cambios que ajustan al estilo de codificación proyecto mediante:
`$ ./script/cpplint.py`
prueba de funcionalidad utilizando:
`$ ./script/test.py`

View file

@ -1,48 +0,0 @@
#Instrucciones de Compilación (Mac)
Siga las siguientes pautas para la construcción de Electron en macOS.
#Requisitos previos
`macOS >= 10.8`
`Xcode >= 5.1`
`node.js (external)`
Si está utilizando Python descargado de Homebrew, también es necesario instalar los siguientes módulos de python:
`pyobjc`
#Obtener el Código
`$ git clone https://github.com/electron/electron.git`
#Bootstrapping (arranque)
The bootstrap script will download all necessary build dependencies and create the build project files. Notice that we're using ninja to build Electron so there is no Xcode project generated.
El script de bootstrap descargará todas las dependencias de construcción necesarias y creara los archivos del proyecto de compilación. notemos que estamos usando `ninja` para construir Electron por lo que no hay un proyecto de Xcode generado.
`$ cd electron`
`$ ./script/bootstrap.py -v`
#Construcción
Construir ambos objetivos de `Release` y `Debug`:
`$ ./script/build.py`
También sólo se puede construir el objetivo de `Debug`:
`$ ./script/build.py -c D`
Después de la construcción está hecho, usted puede encontrar `Electron.app` bajo `out / D.`
#Soporte de 32bit
Electron sólo puede construirse para un objetivo de 64 bits en macOS y no hay un plan para apoyar a 32 bit macOS en el futuro.
#Pruebas
Pon a prueba tus cambios ajustandose al estilo de codificación del proyecto mediante:
`$ ./script/cpplint.py`
Prueba la funcionalidad usando:
`$ ./script/test.py`

View file

@ -1,35 +0,0 @@
#Repaso del Sistema de construcción
Electron utiliza `gyp` para la generación de proyectos y` ninja` para la contrucción. Las Configuraciones del proyecto se pueden encontrar en los archivos `.gypi` y `.gyp `.
#Archivos Gyp
los siguientes archivos `gyp` contienen las principales reglas para la contrucción en electron:
* `atom.gyp` define en si como se compila en Electron.
* `common.gypi` ajusta las configuraciones de generación de Node para construir junto con Chromium.
* `brightray/brightray.gyp` define cómo se construye `brightray` e incluye las configuraciones predeterminadas para linkear con Chromium.
* `brightray/brightray.gypi` incluye configuraciones de generación generales sobre la construcción.
#Construir un componente
Desde Chromium es un proyecto bastante largo, la etapa de enlace final puede tomar pocos minutos, lo que hace que sea difícil para el desarrollo. Con el fin de resolver esto, Chromium introdujo el "componente de construcción", que se basa en construir cada componente como una libreria compartida por separado, haciendo que se enlace muy rápido, pero sacrificando el tamaño del archivo y el rendimiento.
En Electron tomamos un enfoque muy similar: para versiones de `Debug` (depuración), el binario será linkeado a una versión de la libreria compartida de los componentes de Chromium para lograr un tiempo de enlace rápido; para versiones de `Release` (lanzamiento), el binario será linkeado a las versiones de las librerias estáticas, por lo que puede tener es posible tener un mejor tamaño binario y rendimiento.
#Bootstrapping minimo (minimo arranque)
Todos los binarios pre-compilados de Chromium (`libchromiumcontent`) son descargados al ejecutar el script de arranque. Por defecto ambas librerias estáticas y librerias compartidas se descargarán y el tamaño final debe estar entre 800 MB y 2 GB dependiendo de la plataforma.
Por defecto, `libchromiumcontent` se descarga de Amazon Web Services. Si se establece la variable de entorno `LIBCHROMIUMCONTENT_MIRROR`, el bootstrap script se descargará de ella. `libchromiumcontent-qiniu-mirror` es un espejo para el` libchromiumcontent`. Si tiene problemas para acceder a AWS, puede cambiar la dirección de descarga a la misma a través de `exportación LIBCHROMIUMCONTENT_MIRROR = http: // 7xk3d2.dl1.z0.glb.clouddn.com /`
Si sólo desea construir en Electron rápidamente para pruebas o desarrollo, puede descargar sólo las versiones de librerias compartidas pasando el parámetro `--dev`:
`$ ./script/bootstrap.py --dev`
`$ ./script/build.py -c D`
#generación de proyecto de dos frases
Los enlaces de Electron con diferentes conjuntos de librerias en versiones `Release` y `Debug`. `gyp`, sin embargo, no es compatible con la configuración de los diferentes ajustes de enlace para diferentes configuraciones.
Para evitar que Electron utilice una variable de `gyp` `libchromiumcontent_component` para controlar qué configuraciones de enlace usar y sólo generar un objetivo cuando se ejecute `gyp`.
#Nombres de destino
A diferencia de la mayoría de los proyectos que utilizan `Release` y `Debug` como nombres de destino, Electron utiliza `R` y `D` en su lugar. Esto se debe a `gyp` bloquea aleatoriamente si sólo hay una configuración de `Release` o `Debug` definidas, y Electron sólo tiene que generar un objetivo a la vez como se ha indicado anteriormente.
Esto sólo afecta a los desarrolladores, si usted está construyendo Electron para rebranding no se ven afectados.

View file

@ -1,37 +0,0 @@
# Guía de estilo de código
Esta es la guía de estilo de código para Electron.
## C++ y Python
Para C++ y Python, nosotros seguimos la [guía de estilo](http://www.chromium.org/developers/coding-style) de Chromium.
Además hay un script `script/cpplint.py` para verificar si todos los archivos
siguen el estilo.
La versión de Python que estamos usando ahora es Python 2.7.
El código C++ usa muchas abstracciones y tipos de Chromium, por eso
se recomienda familiarizarse con ellos. Un buen lugar para iniciar es
el documento de Chromium sobre [Abstracciones importantes y estructras de datos](https://www.chromium.org/developers/coding-style/important-abstractions-and-data-structures). El documento menciona algunos tipos especiales, tipos por alcance (que
automaticamente liberan su memoria cuando salen de su alcance), mecanismos de
registro de eventos, etcétera.
## CoffeeScript
Para CoffeeScript, nosotros seguimos la [guía de estilo](https://github.com/styleguide/javascript) de Github y también las
siguientes reglas:
* Los archivos **NO** deberían terminar con una nueva línea, por que se busca
seguir los estilos que usa Google.
* Los nombres de los archivos debén estar concatenados con `-` en vez de `_`,
por ejemplo `nombre-de-archivo.coffee` en vez de `nombre_de_archivo.coffee`,
esto es por que en [github/atom](https://github.com/github/atom)
los nombres de los módulos usualmente estan en la forma `nombre-de-modulo`.
Esta regla aplica únicamente a los archivos `.coffee`.
## Nombres de las API
Al crear una nueva API, nosotros deberíamos preferir usar metodos `get` y `set`
en vez de usar el estilo de jQuery que utiliza una sola función. Por ejemplo,
se prefiere `.getText()` y `.setText()` por sobre `.text([text])`. Hay una
[discusión](https://github.com/electron/electron/issues/46) sobre esto.

View file

@ -1,62 +0,0 @@
# Estructura de los directorios del código fuente
El código fuente de electron es separado en pocas partes, en su mayoría
siguiendo las especificaciones para separar archivos que usa Chromium.
Quizá necesites familiarizarte con la [arquitectura multiprocesos](http://dev.chromium.org/developers/design-documents/multi-process-architecture) de Chromium para comprender mejor el código fuente.
## Estructura del código fuente
```
Electron
├──atom - Código fuente de Electron.
| ├── app - Código de arranque.
| ├── browser - La interfaz incluyendo la ventana principal, UI,
| | y todas las cosas del proceso principal. Este le habla al renderizador
| | para manejar las páginas web.
| | ├── lib - Código Javascript para inicializar el proceso principal.
| | ├── ui - Implementaciones de UI para distintas plataformas.
| | | ├── cocoa - Código fuente específico para Cocoa.
| | | ├── gtk - Código fuente específico para GTK+.
| | | └── win - Código fuente específico para Windows GUI.
| | ├── default_app - La página por defecto para mostrar cuando Electron
| | | es iniciado sin proveer una app.
| | ├── api - La implementación de las APIs para el proceso principal.
| | | └── lib - Código Javascript parte de la implementación de la API.
| | ├── net - Código relacionado a la red.
| | ├── mac - Código fuente de Objective-C específico para Mac.
| | └── resources - Iconos, archivos específicos de plataforma, etc.
| ├── renderer - Código que se ejecuta en el proceso de renderizado.
| | ├── lib - Código Javascript del proceso de inicio del renderizador.
| | └── api - La implementación de las APIs para el proceso de renderizado.
| | └── lib - Código Javascript parte de la implementación de la API.
| └── common - Código que se utiliza en ambos procesos, el principal y el de
| renderizado. Incluye algunas funciones de utilidad y código para integrar
| el ciclo de mensajes de Node en el ciclo de mensajes de Chromium.
| ├── lib - Código Javascript común para la inicialización.
| └── api - La implementación de APIs comunes, y los fundamentos de
| los módulos integrados de Electron.
| └── lib - Código Javascript parte de la implementación de la API.
├── chromium_src - Código fuente copiado de Chromium.
├── docs - Documentación.
├── spec - Pruebas automaticas.
├── atom.gyp - Reglas de compilado de Electron.
└── common.gypi - Configuración específica para compilar y reglas
de empaquetado para otros componentes como `node` y `breakpad`.
```
## Estructura de otros directorios
* **script** - Scripts usados para propositos de desarrollo
como compilar, empaquetar, realizar pruebas, etc.
* **tools** - Scripts de ayuda usados por los archivos gyp, contrario a la
carpeta `scripts`, estos scripts nunca deberían ser llamados por los usuarios.
* **vendor** - Código fuente de dependencias externas, no usamos `third_party`
como nombre por que se podría confundir con el mismo directorio
en las carpetas del código fuente de Chromium.
* **node_modules** - Módulos de node usados para la compilación.
* **out** - Directorio temporal de salida usado por `ninja`.
* **dist** - Directorio temporal creado por `script/create-dist.py` cuando
se esta creando una distribución.
* **external_binaries** - Binarios descargados de frameworks externos que no
soportan la compilación con `gyp`.

View file

@ -1,46 +0,0 @@
# Código de Conducta convenido para Contribuyentes
## Nuestro compromiso
En el interés de fomentar una comunidad abierta y acogedora, nosotros como contribuyentes y administradores nos comprometemos a hacer de la participación en nuestro proyecto y nuestra comunidad una experiencia libre de acoso para todos, independientemente de la edad, dimensión corporal, discapacidad, etnia, identidad y expresión de género, nivel de experiencia, nacionalidad, apariencia física, raza, religión, identidad u orientación sexual.
## Nuestros estándares
Ejemplos de comportamiento que contribuyen a crear un ambiente positivo:
* Uso de lenguaje amable e inclusivo
* Respeto a diferentes puntos de vista y experiencias
* Aceptación de críticas constructivas
* Enfocarse en lo que es mejor para la comunidad
* Mostrar empatía a otros miembros de la comunidad
Ejemplos de comportamiento inaceptable por participantes:
* Uso de lenguaje o imágenes sexuales y atención sexual no deseada
* Comentarios insultantes o despectivos (*trolling*) y ataques personales o políticos
* Acoso público o privado
* Publicación de información privada de terceros sin su consentimiento, como direcciones físicas o electrónicas
* Otros tipos de conducta que pudieran considerarse inapropiadas en un entorno profesional.
## Nuestras responsabilidades
Los administradores del proyecto son responsables de clarificar los estándares de comportamiento aceptable y se espera que tomen medidas correctivas y apropiadas en respuesta a situaciones de conducta inaceptable.
Los administradores del proyecto tienen el derecho y la responsabilidad de eliminar, editar o rechazar comentarios, *commits*, código, ediciones de documentación, *issues*, y otras contribuciones que no estén alineadas con este Código de Conducta, o de prohibir temporal o permanentemente a cualquier colaborador cuyo comportamiento sea inapropiado, amenazante, ofensivo o perjudicial.
## Alcance
Este código de conducta aplica tanto a espacios del proyecto como a espacios públicos donde un individuo esté en representación del proyecto o comunidad. Ejemplos de esto incluye el uso de la cuenta oficial de correo electrónico, publicaciones a través de las redes sociales oficiales, o presentaciones con personas designadas en eventos *online* u *offline*. La representación del proyecto puede ser clarificada explicitamente por los administradores del proyecto.
## Aplicación
Ejemplos de abuso, acoso u otro tipo de comportamiento inaceptable puede ser reportado al equipo del proyecto en [INSERTE CORREO AQUÍ]. Todas las quejas serán revisadas e investigadas, generando un resultado apropiado a las circunstancias. El equipo del proyecto está obligado a mantener confidencialidad de la persona que reportó el incidente. Detalles específicos acerca de las políticas de aplicación pueden ser publicadas por separado.
Administradores que no sigan o que no hagan cumplir este Código de Conducta pueden ser eliminados de forma temporal o permanente del equipo administrador.
## Atribución
Este Código de Conducta es una adaptación del [Contributor Covenant][homepage], versión 1.4, disponible en [http://contributor-covenant.org/version/1/4/es/][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/es/

View file

@ -1,87 +0,0 @@
[![Electron Logo](https://electron.atom.io/images/electron-logo.svg)](https://electron.atom.io/)
[![Travis Build Status](https://travis-ci.org/electron/electron.svg?branch=master)](https://travis-ci.org/electron/electron)
[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/kvxe4byi7jcxbe26/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/electron)
[![devDependency Status](https://david-dm.org/electron/electron/dev-status.svg)](https://david-dm.org/electron/electron?type=dev)
[![Join the Electron Community on Slack](http://atom-slack.herokuapp.com/badge.svg)](http://atom-slack.herokuapp.com/)
:memo: Traducciones disponibles: [Koreano](https://github.com/electron/electron/tree/master/docs-translations/ko-KR/project/README.md) | [Chino Simplificado](https://github.com/electron/electron/tree/master/docs-translations/zh-CN/project/README.md) | [Portugués Brasileño](https://github.com/electron/electron/tree/master/docs-translations/pt-BR/project/README.md) | [Chino Tradicional](https://github.com/electron/electron/tree/master/docs-translations/zh-TW/project/README.md)
Electron es un framework que permite escribir aplicaciones de escritorio multiplataforma
usando JavaScript, HTML y CSS. Está basado en [Node.js](https://nodejs.org/) con
[Chromium](http://www.chromium.org). Es usado por [Atom
editor](https://github.com/atom/atom) y muchas otras [aplicaciones](https://electron.atom.io/apps).
Sigue a [@ElectronJS](https://twitter.com/electronjs) en Twitter para estar informado de anuncios
importantes.
Este proyecto se adhiere al [Código de Conducta convenido para Colaboradores](CODE_OF_CONDUCT.md).
Si desea participar, debes seguir este código de conducta. Por favor reporta un comportamiento
no aceptado a electron@github.com.
## Downloads
Para instalar binarios precompilados, usa
[`npm`](https://docs.npmjs.com/):
```sh
# Instalación de las dependencias de desarrollo
npm install electron --save-dev
# Instalación de `electron` de manera global a tu $PATH
npm install electron -g
```
Mira la [página de lanzamientos](https://github.com/electron/electron/releases) para
los prebuilt binaries, debug symbols, y más.
### Mirrors
- [China](https://npm.taobao.org/mirrors/electron)
## Documentación
Las guías y API de referencia están disponibles en el directorio
[docs](https://github.com/electron/electron/tree/master/docs). Ahí también
puedes encontrar documentos que describen cómo construir y contribuir en Electron.
## Traducciones de la Documentación
- [Portugués Brasileño](https://github.com/electron/electron/tree/master/docs-translations/pt-BR)
- [Koreano](https://github.com/electron/electron/tree/master/docs-translations/ko-KR)
- [Japonés](https://github.com/electron/electron/tree/master/docs-translations/jp)
- [Español](https://github.com/electron/electron/tree/master/docs-translations/es)
- [Chino Simplificado](https://github.com/electron/electron/tree/master/docs-translations/zh-CN)
- [Chino Tradicional](https://github.com/electron/electron/tree/master/docs-translations/zh-TW)
- [Turco](https://github.com/electron/electron/tree/master/docs-translations/tr-TR)
- [Thai](https://github.com/electron/electron/tree/master/docs-Translations/th-TH)
- [Ucraniano](https://github.com/electron/electron/tree/master/docs-translations/uk-UA)
- [Ruso](https://github.com/electron/electron/tree/master/docs-translations/ru-RU)
- [Francés](https://github.com/electron/electron/tree/master/docs-translations/fr-FR)
## Inicio rápido
Clona y ejecuta el repositorio [`electron/electron-quick-start`](https://github.com/electron/electron-quick-start)
para ver una aplicación mínima en acción.
## Comunidad
Puedes preguntar y interactuar con la comunidad en los siguientes lugares:
- [`electron`](http://discuss.atom.io/c/electron) Categoría en los Foros de
Atom.
- `#atom-shell` canal de IRC en Freenode
- [`Atom`](http://atom-slack.herokuapp.com/) canales en Slack
- [`electron-br`](https://electron-br.slack.com) *(Portugués Brasileño)*
- [`electron-kr`](http://www.meetup.com/electron-kr/) *(Koreano)*
- [`electron-jp`](https://electron-jp.slack.com) *(Japonés)*
- [`electron-tr`](http://electron-tr.herokuapp.com) *(Turco)*
- [`electron-id`](https://electron-id.slack.com) *(Indonés*
Mira [awesome-electron](https://github.com/sindresorhus/awesome-electron)
donde la comunidad mantiene una lista útil de ejemplos de aplicaciones, herramientas y recursos.
## Licencia
[MIT](https://github.com/electron/electron/blob/master/LICENSE)
Si usas los logos de Electron ó GitHub, asegúrate de seguir las [GitHub logo guidelines](https://github.com/logos).

View file

@ -1,100 +0,0 @@
# Gúia de estilo de Electron
Encuentra el apartado correcto para cada tarea: [leer la documentación de Electron](#reading-electron-documentation)
o [escribir documentación para Electron](#writing-electron-documentation).
## Escribir Documentación para Electron
Estas son las maneras en las que construimos la documentación de Electron.
- Máximo un título `h1` por página.
- Utilizar `bash` en lugar de `cmd` en los bloques de código (por el resaltado
de sintaxis).
- Los títulos `h1` en el documento deben corresponder al nombre del objeto
(ej. `browser-window``BrowserWindow`).
- Archivos separados por guiones, mas sin embargo, es correcto.
- No subtítulos seguidos por otros subtítulos, añadir por lo menos un enunciado
de descripción.
- Métodos de cabecera son delimitados con apóstrofes: `código`.
- Cabeceras de Eventos son delimitados con 'comillas' simples.
- No generar listas de mas de dos niveles (debido al renderizador de Markdown
desafortunadamente).
- Agregar títulos de sección: Eventos, Métodos de Clases y Métodos de Instancia.
- Utilizar 'deberá' en lugar de 'debería' al describir resultados.
- Eventos y Métodos son cabeceras `h3`.
- Argumentos opcionales escritos como `function (required[, optional])`.
- Argumentos opcionales son denotados cuando se llaman en listas.
- Delimitador de línea de 80-columnas.
- Métodos específicos de Plataformas son denotados en itálicas seguidas por la cabecera del método.
- ```### `method(foo, bar)` _macOS_```
- Preferir 'en el ___ proceso' en lugar de 'sobre el'
### Traducciones de la Documentación
Traducciones de documentos de Electron se encuentran dentro del folder
`docs-translations`.
Para agregar otro set (o un set parcial):
- Crear un subdirectorio nombrado igual a la abreviación del lenguaje.
- Dentro de ese subdirectorio, duplicar el directorio de `docs`, manteniendo los
mismos nombres de directorios y archivos.
- Traducir los archivos.
- Actualizar el `README.md` dentro del subdirectorio del lenguaje apuntando a
los archivos que has traducido.
- Agregar un enlace al folder de tu traducción en la sección principal Electron
[README](https://github.com/electron/electron#documentation-translations).
## Leyendo la Documentación de Electron
Estos son algunos consejos para entender la sintaxis de la documentación de
Electron.
### Métodos
Un ejemplo de la documentación del [método](https://developer.mozilla.org/en-US/docs/Glossary/Method):
---
`methodName(required[, optional]))`
* `require` String, **required**
* `optional` Integer
---
El nombre del método es seguido por los argumentos que recibe. Argumentos
opcionales son denotados por corchetes rodeados por el argumento opcional y la
coma requerida si el argumento opcional fuera seguido por otro argumento.
Debajo del método se encuentra más información detallada de cada uno de los
argumentos. El tipo de argumento es denotado por los tipos comúnes:
[`String`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String),
[`Number`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number),
[`Object`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object),
[`Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)
o un tipo personalizado como el [`webContent`](api/web-content.md) de Electron.
### Eventos
Un ejemplo de documentación del [evento](https://developer.mozilla.org/en-US/docs/Web/API/Event):
---
Event: 'wake-up'
Returns:
* `time` String
---
El evento es una cadena que es utilizada luego de un método observador `.on`. Si
regresa un valor, él y su tipo son denotados abajo. Si se estaba a la escucha y
respondió a este evento se debería ver así:
```javascript
Alarm.on('wake-up', function (time) {
console.log(time)
})
```

View file

@ -1,120 +0,0 @@
# Distribución de la Aplicación
Para distribuir tu aplicación con Electron, el directorio que contiene la
aplicación deberá llamarse `app`, y ser colocado debajo del directorio de
recursos de Electron (en macOS es `Electron.app/Contents/Resources/`, en Linux y
Windows es `resources/`), de esta forma:
En macOS:
```text
electron/Electron.app/Contents/Resources/app/
├── package.json
├── main.js
└── index.html
```
En Windows y Linux:
```text
electron/resources/app
├── package.json
├── main.js
└── index.html
```
Luego ejecutar `Electron.app` (o `electron` en Linux, `electron.exe` en Windows),
y Electron será iniciado como tu aplicación. El directorio `electron` será
entonces tu distribución que recibirán los usuarios finales.
## Empaquetando tu aplicación en un archivo
Además de distribuir tu aplicación al copiar todos los archivos de código fuente,
también puedes empaquetar tu aplicación como un archivo [asar](https://github.com/atom/asar)
y de esta forma evitar exponer del código fuente de tu aplicación a los usuarios.
Para utilizar un archivo `asar` en reemplazo del directorio `app`, debes de
renombrar el archivo a `app.asar`, y colocarlo por debajo el directorio de recursos
de Electron (ver en seguida), Electron intentará leer el archivo y arrancar desde el.
En macOS:
```text
electron/Electron.app/Contents/Resources/
└── app.asar
```
En Windows y Linux:
```text
electron/resources/
└── app.asar
```
Más detalles en [Empaquetado de Aplicaciones](application-packaging.md).
## Redefinición con Binarios Descargados
Luego de empaquetar tu aplicación en Electron, querrás redefinir Electron antes
de distribuirlo a los usuarios.
### Windows
Puedes renombrar `electron.exe` a cualquier nombre que desees, y editar su ícono
y otra información con herramientas como [rcedit](https://github.com/atom/rcedit).
### macOS
Puedes renombrar `Electron.app` a cualquier nombre que desees, y tendrás que
renombrar los campos `CFBundleDisplayName`, `CFBundleIdentifier` y `CFBundleName`
en los siguientes archivos:
* `Electron.app/Contents/Info.plist`
* `Electron.app/Contents/Frameworks/Electron Helper.app/Contents/Info.plist`
También puedes renombrar el helper de la aplicación para evitar que aparezca
como `Electron Helper` en el Monitor de Actividades. Pero asegurate de renombrar
el nombre de archivo del ejecutable.
La estructura de una aplicación renombrada será:
```
MyApp.app/Contents
├── Info.plist
├── MacOS/
│   └── MyApp
└── Frameworks/
├── MyApp Helper EH.app
| ├── Info.plist
| └── MacOS/
|    └── MyApp Helper EH
├── MyApp Helper NP.app
| ├── Info.plist
| └── MacOS/
|    └── MyApp Helper NP
└── MyApp Helper.app
├── Info.plist
└── MacOS/
   └── MyApp Helper
```
### Linux
Puedes renombrar el ejectuable `electron` a cualquier nombre que desees.
## Redefinición mediante la recompilación de Electron desde el código fuente
También es posible redefinir Electron cambiando el nombre del producto y
compilandolo desde sus fuentes. Para realizar esto necesitas modificar el
archivo `atom.gyp` y realizar una compilación desde cero.
### grunt-build-atom-shell
La modificación a mano del código de Electron y su compilación puede resultar
complicada, por lo cual se ha generado una tarea Grunt para manejar esto de
forma automaticamente:
[grunt-build-atom-shell](https://github.com/paulcbetts/grunt-build-atom-shell).
Esta tarea se encargará de modificar el archivo `.gyp`, compilar el código desde
las fuentes, y luego reconstruir los módulos nativos de la aplicación para que
coincidan con el nuevo nombre del ejecutable.

View file

@ -1,157 +0,0 @@
# Empaquetamiento de aplicaciones
Para proteger los recursos y el código fuente de tu aplicación, puedes optar por empaquetar
tu aplicación en un paquete [asar][asar].
## Generando un archivo `asar`
Un paquete [asar][asar] es un formato sencillo similar a tar, este formato concatena todos los archivos en uno,
Electron puede leer el contenido sin desempaquetar todos los archivos.
A continuación, los pasos para empaquetar tu aplicación con `asar`:
### 1. Instalar asar
```bash
$ npm install -g asar
```
### 2. Empaquetar utilizando `asar pack`
```bash
$ asar pack your-app app.asar
```
## Utilizando los paquetes `asar`
En Electron existen dos tipos de APIs: las APIs de Node, provistas por Node.js,
y las APIs Web, provistas por Chromium. Ambas APIs soportan la lectura de paquetes `asar`.
### API Node
Con parches especiales en Electron, las APIs de Node como `fs.readFile` and `require`
tratan los paquetes `asar` como directorios virtuales, y el contenido es accesible como si se tratara
de archivos normales en el sistema de archivos.
Por ejemplo, supongamos que tenemos un paquete `example.asar` bajo `/path/to`:
```bash
$ asar list /path/to/example.asar
/app.js
/file.txt
/dir/module.js
/static/index.html
/static/main.css
/static/jquery.min.js
```
Leer un archivo de nuestro paquete `asar`:
```javascript
var fs = require('fs')
fs.readFileSync('/path/to/example.asar/file.txt')
```
Listar todos los archivos de la raíz:
```javascript
var fs = require('fs')
fs.readdirSync('/path/to/example.asar')
```
Utilizar un módulo que se encuentra dentro del archivo:
```javascript
require('/path/to/example.asar/dir/module.js')
```
También puedes mostrar una página web contenida en un `asar` utilizando `BrowserWindow`.
```javascript
var BrowserWindow = require('browser-window')
var win = new BrowserWindow({width: 800, height: 600})
win.loadURL('file:///path/to/example.asar/static/index.html')
```
### API Web
En una págin web, los archivos que se encuentran en el paquete son accesibles a través del protocolo `file:`.
Al igual que la API Node, los paquetes `asar` son tratados como directorios.
Por ejemplo, para obtener un archivo con `$.get`:
```html
<script>
var $ = require('./jquery.min.js');
$.get('file:///path/to/example.asar/file.txt', function(data) {
console.log(data);
});
</script>
```
### Utilizando un paquete `asar` como un archivo normal
En algunas situaciones necesitaremos acceder al paquete `asar` como archivo, por ejemplo,
si necesitáramos verificar la integridad del archivo con un checksum.
Para casos así es posible utilizar el módulo `original-fs`, que provee la API `fs` original:
```javascript
var originalFs = require('original-fs')
originalFs.readFileSync('/path/to/example.asar')
```
## Limitaciones de la API Node:
A pesar de que hemos intentado que los paquetes `asar` funcionen como directorios de la mejor forma posible,
aún existen limitaciones debido a la naturaleza de bajo nivel de la API Node.
### Los paquetes son de sólo lectura
Los paquetes `asar` no pueden ser modificados, por lo cual todas las funciones que modifiquen archivos
no funcionarán.
## Los directorios del paquete no pueden establecerse como working directories
A pesar de que los paquetes `asar` son manejados virtualmente como directorios,
estos directorios no existen en el sistema de archivos, por lo cual no es posible establecerlos
como working directory, el uso de la opción `cwd` en algunas APIs podría causar errores.
### Desempaquetamiento adicional en algunas APIs
La mayoría de las APIs `fs` pueden leer u obtener información sobre un archivo en un paquete `asar` sin
la necesidad de desempaquetarlo, pero algunas APIs requieren la ruta real. En estos casos Electron extraerá
el archivo a una ruta temporal. Esto agrega un overhead a algunas APIs.
Las APIs que requieren el desempaquetamiento adicional son:
* `child_process.execFile`
* `fs.open`
* `fs.openSync`
* `process.dlopen` - Utilizado por `require` en los módulos nativos
### Información falsa en `fs.stat`
El objeto `Stats` retornado por `fs.stat` y otras funciones relacionadas,
no es preciso, ya que los archivos del paquete `asar` no existen en el sistema de archivos.
La utilización del objeto `Stats` sólo es recomendable para obtener el tamaño del archivo y/o
comprobar el tipo de archivo.
## Agregando archivos al paquete `asar`
Como se menciona arriba, algunas APIs de Node desempaquetarán archivos cuando exista una llamada
que los referencie, además de los problemas de rendimiento que esto podría ocasionar, también
podría accionar alertas falsas en software antivirus.
Para lidiar con esto, puedes desempaquetar algunos archivos utilizando la opción `--unpack`.
A continuación, un ejemplo que excluye las librerías compartidas de los módulos nativos:
```bash
$ asar pack app app.asar --unpack *.node
```
Después de ejecutar este comando, además del archivo `app.asar`, también se creará
un directorio `app.asar.unpacked`, que contendrá los archivos desempaquetados.
Este directorio deberá copiarse junto con el archivo `app.asar` a la hora de distribuir la aplicación.
[asar]: https://github.com/atom/asar

View file

@ -1,45 +0,0 @@
# Depurando el proceso principal
Los devtools sólo pueden depurar las páginas web (el código del proceso renderer).
Para depurar el código del proceso principal, Electron provee dos opciones para la línea de comandos: `--debug` y `--debug-brk`.
## Opciones para la línea de comandos
### `--debug=[port]`
Esta opción escuchará mensajes del protocolo de depuración V8 en `port`, por defecto `port` es `5858`.
### `--debug-brk=[port]`
Similar a `--debug` pero realiza una pausa en la primera línea del script.
## Utilizando node-inspector para depuración
__Nota:__ Electron utiliza node v0.11.13, esta versión aún no funciona bien con node-inspector,
el proceso principal podría fallar al inspeccionar el objeto `process`.
### 1. Iniciar [node-inspector][node-inspector]
```bash
$ node-inspector
```
### 2. Activar el modo de depuración en Electron
Es posible iniciar Electron con la opción de depuración:
```bash
$ electron --debug=5858 your/app
```
o, pausar el script en la primera línea:
```bash
$ electron --debug-brk=5858 your/app
```
### 3. Cargar la interfaz del depurador
Abre http://127.0.0.1:8080/debug?ws=127.0.0.1:8080&port=5858 en Chrome.
[node-inspector]: https://github.com/node-inspector/node-inspector

View file

@ -1,173 +0,0 @@
# Integración con el entorno de escritorio
Los sistemas operativos proveen diferentes características para integrar aplicaciones
en sus entornos de escritorio. Por ejemplo, en Windows, las aplicaciones pueden agregar accesos directos
en la JumpList de la barra de tareas, y en Mac, las aplicaciones pueden agregar un menú personalizado en el dock.
Esta guía explica cómo integrar tu aplicación en esos entornos de escritorio a través de las APIs de Electron.
## Documentos recientes (Windows y macOS)
Windows y macOS proveen un acceso sencillo a la lista de documentos recientes.
__JumpList:__
![JumpList, Archivos recientes](http://i.msdn.microsoft.com/dynimg/IC420538.png)
__Menú Dock:__
<img src="https://cloud.githubusercontent.com/assets/639601/5069610/2aa80758-6e97-11e4-8cfb-c1a414a10774.png" height="353" width="428" >
Para agregar un archivo a la lista de documentos recientes, puedes utilizar:
[app.addRecentDocument][addrecentdocument] API:
```javascript
var app = require('app')
app.addRecentDocument('/Users/USERNAME/Desktop/work.type')
```
También puedes utilizar [app.clearRecentDocuments](clearrecentdocuments) para vaciar la lista de documentos recientes:
```javascript
app.clearRecentDocuments()
```
### Notas sobre Windows
Para activar esta característica en Windows, tu aplicación debe registrar un handler
para el tipo de archivo que quieres utilizar, de lo contrario el archivo no aparecerá
en la JumpList, aún después de agregarlo. Puedes encontrar más información sobre el proceso de
registrar tu aplicación en [Application Registration][app-registration].
Cuando un usuario haga click en un archivo de la JumpList, una nueva instancia de tu aplicación
se iniciará, la ruta del archivo se agregará como un argumento de la línea de comandos.
### Notas sobre macOS
Cuando un archivo es solicitado desde el menú de documentos recientes, el evento `open-file`
del módulo `app` será emitido.
## Menú dock personalizado (macOS)
macOS permite a los desarrolladores definir un menú personalizado para el dock,
el cual usualmente contiene algunos accesos directos a las características más comunes
de tu aplicación:
__Menú dock de Terminal.app:__
<img src="https://cloud.githubusercontent.com/assets/639601/5069962/6032658a-6e9c-11e4-9953-aa84006bdfff.png" height="354" width="341" >
Para establecer tu menú dock, puedes utilizar la API `app.dock.setMenu`, la cual sólo está disponible para macOS:
```javascript
var app = require('app')
var Menu = require('menu')
var dockMenu = Menu.buildFromTemplate([
{label: 'New Window', click: function () { console.log('New Window') }},
{label: 'New Window with Settings',
submenu: [
{label: 'Basic'},
{label: 'Pro'}
]
},
{label: 'New Command...'}
])
app.dock.setMenu(dockMenu)
```
## Tareas de usuario (Windows)
En Windows puedes especificar acciones personalizadas en la categoría `Tasks` del JumpList,
tal como menciona MSDN:
> Las aplicaciones definen tareas basadas en las características del programa
> y las acciones clave que se esperan de un usuario. Las tareas deben ser
> libres de contexto, es decir, la aplicación no debe encontrarse en ejecución
> para que estas acciones funcionen. También deberían ser las acciones estadísticamente
> más comunes que un usuario normal realizaría en tu aplicación, como por ejemplo,
> redactar un mensaje de correo electrónico, crear un documento en el procesador de textos,
> ejecutar una aplicación en cierto modo, o ejecutar alguno de sus subcomandos. Una aplicación
> no debería popular el menú con características avanzadas que el usuario estándar no necesita
> ni con acciones que sólo se realizan una vez, como por ejemplo, el registro. No utilices
> las tareas para mostrar elementos promocionales como actualizaciones u ofertas especiales.
>
> Es recomendable que la lista de tareas sea estática. Debe mantenerse a pesar
> de los cambios de estado de la aplicación. Aunque exista la posibilidad de variar
> el contenido de la lista dinámicamente, debes considerar que podría ser confuso
> para un usuario que no espera que el destino de la lista cambie.
__Tareas de Internet Explorer:__
![IE](http://i.msdn.microsoft.com/dynimg/IC420539.png)
A diferencia del menú dock en macOS, el cual es un menú real, las tareas de usuario en Windows
funcionan como accesos directos de aplicación, que al ser clickeados, lanzan el programa
con argumentos específicos.
Para establecer las tareas de usuario en tu aplicación, puedes utilizar:
[app.setUserTasks][setusertaskstasks] API:
```javascript
var app = require('app')
app.setUserTasks([
{
program: process.execPath,
arguments: '--new-window',
iconPath: process.execPath,
iconIndex: 0,
title: 'New Window',
description: 'Create a new window'
}
])
```
Para purgar la lista de tareas, puedes llamar a `app.setUserTasks` con un array vacío:
```javascript
app.setUserTasks([])
```
Las tareas de usuario aún serán visibles después de cerrar tu aplicación, por lo cual
el ícono y la ruta del programa deben existir hasta que la aplicación sea desinstalada.
## Accesos directos en el lanzador Unity (Linux)
En Unity, es posible agregar algunas entradas personalizadas, modificando el archivo `.desktop`,
ver [Adding shortcuts to a launcher][unity-launcher].
__Accesos directos de Audacious:__
![audacious](https://help.ubuntu.com/community/UnityLaunchersAndDesktopFiles?action=AttachFile&do=get&target=shortcuts.png)
## Barra de progreso en la barra de tareas (Windows y Unity)
En Windows, un botón en la barra de tareas puede utilizarse para mostrar una barra de progreso. Esto permite
que una ventana muestre la información de progreso al usuario, sin que el usuario tenga la ventana de la aplicación activa.
El entorno de escritorio Unity también posee una característica similar que permite mostrar una barra de progreso en el lanzador.
__Barra de progreso en un botón de la barra de herramientas:__
![Taskbar Progress Bar](https://cloud.githubusercontent.com/assets/639601/5081682/16691fda-6f0e-11e4-9676-49b6418f1264.png)
__Barra de progreso en el lanzador Unity:__
![Unity Launcher](https://cloud.githubusercontent.com/assets/639601/5081747/4a0a589e-6f0f-11e4-803f-91594716a546.png)
Para establecer la barra de progreso de una ventana, puedes utilizar
[BrowserWindow.setProgressBar][setprogressbar] API:
```javascript
var window = new BrowserWindow()
window.setProgressBar(0.5)
```
[addrecentdocument]: ../api/app.md#appaddrecentdocumentpath
[clearrecentdocuments]: ../api/app.md#appclearrecentdocuments
[setusertaskstasks]: ../api/app.md#appsetusertaskstasks
[setprogressbar]: ../api/browser-window.md#browserwindowsetprogressbarprogress
[setrepresentedfilename]: ../api/browser-window.md#browserwindowsetrepresentedfilenamefilename
[setdocumentedited]: ../api/browser-window.md#browserwindowsetdocumenteditededited
[app-registration]: http://msdn.microsoft.com/en-us/library/windows/desktop/ee872121(v=vs.85).aspx
[unity-launcher]: https://help.ubuntu.com/community/UnityLaunchersAndDesktopFiles#Adding_shortcuts_to_a_launcher

View file

@ -1,49 +0,0 @@
# Extensión DevTools
Para facilitar la depuración, Electron provee un soporte básico para la extensión
[Chrome DevTools][devtools-extension].
Para la mayoría de las extensiones devtools, simplemente puedes descargar el código fuente
y utilizar `BrowserWindow.addDevToolsExtension` para cargarlas, las extensiones cargadas
serán recordadas para que no sea necesario llamar a la función cada vez que creas una ventana.
Por ejemplo, para usar la extensión [React DevTools](https://github.com/facebook/react-devtools), primero debes descargar el código fuente:
```bash
$ cd /some-directory
$ git clone --recursive https://github.com/facebook/react-devtools.git
```
Luego cargas la aplicación en Electron, abriendo devtools en cualquier ventana,
y ejecutando este código en la consola devtools:
```javascript
require('remote').require('browser-window').addDevToolsExtension('/some-directory/react-devtools')
```
Para remover una extensión, puedes utilizar `BrowserWindow.removeDevToolsExtension`
especificando el nombre, y esta ya no se cargará la siguiente vez que abras devtools:
```javascript
require('remote').require('browser-window').removeDevToolsExtension('React Developer Tools')
```
## Formato de las extensiones devtools
Idealmente todas las extensiones devtools escritas para Chrome pueden ser cargadas por Electron,
pero para ello deben estar en un directorio plano, las extensiones empaquetadas como `crx`
no pueden ser cargadas por Chrome a no ser que halles una forma de extraerlas a un directorio.
## Páginas en segundo plano (background)
Electron no soporta la característica de páginas en segundo plano de las extensiones de Chrome,
las extensiones que utilizan esta característica podrían no funcionar.
## APIs `chrome.*`
Algunas extensiones utilizan las APIs `chrome.*`, hemos realizado un esfuerzo
para implementar esas APIs en Electron, sin embargo no han sido implementadas en su totalidad.
Dado que no todas las funciones `chrome.*` han sido implementadas, si la extensión devtools está utilizando otras APIs más allá de `chrome.devtools.*`, es muy probable que no funcione. Puedes reportar fallos en el issue tracker para que podamos agregar soporte a esas APIs.
[devtools-extension]: https://developer.chrome.com/extensions/devtools

View file

@ -1,80 +0,0 @@
# Detección del evento en línea/fuera de línea
La detección de estos eventos puede ser implementada en el proceso renderer utilizando las APIs HTML5 estándar,
como en este ejemplo:
_main.js_
```javascript
var app = require('app')
var BrowserWindow = require('browser-window')
var onlineStatusWindow
app.on('ready', function () {
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false })
onlineStatusWindow.loadURL(`file://${__dirname}/online-status.html`)
})
```
_online-status.html_
```html
<!DOCTYPE html>
<html>
<body>
<script>
var alertOnlineStatus = function() {
window.alert(navigator.onLine ? 'online' : 'offline');
};
window.addEventListener('online', alertOnlineStatus);
window.addEventListener('offline', alertOnlineStatus);
alertOnlineStatus();
</script>
</body>
</html>
```
Existen casos en donde necesitas responder a estos eventos desde el proceso principal.
El proceso principal no posee un objeto `navigator`, por lo tanto no puede detectar estos eventos directamente.
Es posible reenviar el evento al proceso principal mediante la utilidad de intercomunicación entre procesos (ipc):
_main.js_
```javascript
var app = require('app')
var ipc = require('ipc')
var BrowserWindow = require('browser-window')
var onlineStatusWindow
app.on('ready', function () {
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false })
onlineStatusWindow.loadURL(`file://${__dirname}/online-status.html`)
})
ipc.on('online-status-changed', function (event, status) {
console.log(status)
})
```
_online-status.html_
```html
<!DOCTYPE html>
<html>
<body>
<script>
var ipc = require('ipc');
var updateOnlineStatus = function() {
ipc.send('online-status-changed', navigator.onLine ? 'online' : 'offline');
};
window.addEventListener('online', updateOnlineStatus);
window.addEventListener('offline', updateOnlineStatus);
updateOnlineStatus();
</script>
</body>
</html>
```

View file

@ -1,148 +0,0 @@
## Introducción
Electron permite la creación de aplicaciones de escritorio utilizando JavaScript puro, a través de un runtime con APIs nativas. Puedes verlo como una variante de io.js, enfocado a aplicaciones de escritorio, en vez de servidores web.
Esto no significa que Electron sea un binding de librerías GUI para JavaScript.
Electron utiliza páginas web como su GUI, por lo cual puedes verlo como un navegador Chromium mínimo,
controlado por JavaScript.
### El proceso principal (main process)
En Electron, el proceso que ejecuta el script `main` del `package.json` se llama __el proceso principal__.
El script que corre en el proceso principal puede crear páginas para mostrar la GUI.
### El proceso renderer (renderer process)
Dado que Electron utiliza Chromium para mostrar las páginas web,
también es utilizada la arquitectura multiproceso de Chromium.
Cada página web en Electron se ejecuta en su propio proceso,
el cual es llamado __el proceso renderer__.
En los navegadores normales, las páginas web usualmente se ejecutan en un entorno
sandbox y no tienen acceso a los recursos nativos. Los usuarios de Electron tienen el poder
de utilizar las APIs de io.js en las páginas web, permitiendo interacciones de bajo nivel con el sistema operativo.
### Diferencias entre el proceso principal y el proceso renderer
El proceso principal crea páginas web mediante instancias de `BrowserWindow`. Cada instancia de `BrowserWindow` ejecuta su propia página web y su propio proceso renderer.
Cuando una instancia de `BrowserWindow` es destruida, también su proceso renderer correspondiente acaba.
El proceso principal gestiona las páginas web y sus correspondientes procesos renderer.
Cada proceso renderer es aislado y sólo considera relevante la página web que corre en él.
En las páginas web, no está permitido llamar a APIs relacionadas a la GUI nativa
porque la gestión de los recursos GUI nativos es peligrosa, y tiende a que ocurran leaks de memoria.
Si deseas realizar operaciones GUI en una página web, el proceso renderer de la página web debe comunicarse
con el proceso principal, y solicitar a este que realice esas operaciones.
En Electron, hemos proveído el módulo [ipc](../../../docs/api/ipc-renderer.md) para la comunicación
entre el proceso principal y el proceso renderer. Y también hay un módulo [remote](../../../docs/api/remote.md)
para comunicación al estilo RPC.
## Escribe tu primera aplicación Electron
Generalmente, una aplicación Electron tendrá la siguiente estructura:
```text
your-app/
├── package.json
├── main.js
└── index.html
```
El formato de `package.json` es exactamente el mismo que cualquier módulo Node,
y el script especificado en el campo `main` será el script de arranque de tu aplicación,
a ser ejecutado por el proceso principal. Un ejemplo de `package.json` podría verse así:
```javascripton
{
"name" : "your-app",
"version" : "0.1.0",
"main" : "main.js"
}
```
El `main.js` debería crear las ventanas y gestionar los eventos del sistema, un ejemplo típico sería:
```javascript
var app = require('app') // Módulo para controlar el ciclo de vida de la aplicación.
var BrowserWindow = require('browser-window') // Módulo para crear uan ventana de navegador.
// Mantener una referencia global al objeto window, si no lo haces, esta ventana
// se cerrará automáticamente cuando el objeto JavaScript sea recolectado (garbage collected):
var mainWindow = null
// Salir de todas las ventanas cuando se cierren.
app.on('window-all-closed', function () {
// En macOS es común que las aplicaciones y su barra de menú
// se mantengan activas hasta que el usuario cierre la aplicación
// explícitamente utilizando Cmd + Q
if (process.platform !== 'darwin') {
app.quit()
}
})
// Este método será llamado cuando Electron haya finalizado la inicialización
// y esté listo para crear ventanas de navegador.
app.on('ready', function () {
// Crear la ventana.
mainWindow = new BrowserWindow({width: 800, height: 600})
// cargar el index.html de nuestra aplicación.
mainWindow.loadURL(`file://${__dirname}/index.html`)
// Desplegar devtools.
mainWindow.openDevTools()
// Evento emitido cuando se cierra la ventana.
mainWindow.on('closed', function () {
// Eliminar la referencia del objeto window.
// En el caso de soportar multiples ventanas, es usual almacenar
// los objetos window en un array, este es el momento en el que debes eliminar el elemento correspondiente.
mainWindow = null
})
})
```
Finalmente el `index.html` es la página web que mostraremos:
```html
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<h1>Hello World!</h1>
We are using io.js <script>document.write(process.version)</script>
and Electron <script>document.write(process.versions.electron)</script>.
</body>
</html>
```
## Ejecutar la aplicación
Cuando termines de escribir tu aplicación, puedes distribuirla
siguiendo la [guía de distribución](./application-distribution-es.md)
y luego ejecutar la aplicación empaquetada. También puedes utilizar el binario de Electron
para ejecutar tu aplicación de forma directa.
En Windows:
```bash
$ .\electron\electron.exe your-app\
```
En Linux:
```bash
$ ./electron/electron your-app/
```
En macOS:
```bash
$ ./Electron.app/Contents/MacOS/Electron your-app/
```
`Electron.app` es parte del paquete de release de Electron, puedes descargarlo [aquí](https://github.com/electron/electron/releases).

View file

@ -1,30 +0,0 @@
# Plataformas soportadas
Las siguientes plataformas son soportadas por Electron:
### macOS
Sólo se proveen binarios de 64 bit para macOS.
La versión mínima soportada es macOS 10.8.
### Windows
Windows 7 y posteriores son soportados, las versiones antiguas no son soportadas (y no funcionan).
Se proveen binarios para las arquitecturas `x86` y `amd64` (x64).
Nota: La versión para `ARM` de Windows no está soportada aún.
### Linux
Los binarios preconstruidos para `ia32`(`i686`) y `x64`(`amd64`) son construidos sobre
Ubuntu 12.04, el binario para `arm` es construido sobre ARM v7 con la ABI hard-float
y NEON para Debian Wheezy.
La posibilidad de que un binario preconstruido se ejecute en una distribución determinada
depende de las librerías contra las que fue enlazado Electron.
Por ahora sólo se garantiza la ejecución en Ubuntu 12.04, aunque también se ha verificado
el funcionamiento de los binarios preconstruidos en las siguientes plataformas:
* Ubuntu 12.04 and later
* Fedora 21
* Debian 8

View file

@ -1,57 +0,0 @@
# Utilizando módulos Node nativos
Los módulos Node nativos son soportados por Electron, pero dado que Electron
está utilizando una versión distinta de V8, debes especificar manualmente la
ubicación de las cabeceras de Electron a la hora de compilar módulos nativos.
## Compatibilidad de módulos nativos
A partir de Node v0.11.x han habido cambios vitales en la API de V8.
Es de esperar que los módulos escritos para Node v0.10.x no funcionen con Node v0.11.x.
Electron utiliza Node v.0.11.13 internamente, y por este motivo tiene el mismo problema.
Para resolver esto, debes usar módulos que soporten Node v0.11.x,
[muchos módulos](https://www.npmjs.org/browse/depended/nan) soportan ambas versiones.
En el caso de los módulos antiguos que sólo soportan Node v0.10.x, debes usar el módulo
[nan](https://github.com/rvagg/nan) para portarlos a v0.11.x.
## ¿Cómo instalar módulos nativos?
### La forma fácil
La forma más sencilla de recompilar módulos nativos es a través del paquete
[`electron-rebuild`](https://github.com/paulcbetts/electron-rebuild),
el cual abstrae y maneja los pasos de descargar las cabeceras y compilar los módulos nativos:
```sh
npm install --save-dev electron-rebuild
# Ejecuta esto cada vez que ejecutes npm install
./node_modules/.bin/electron-rebuild
```
### La forma node-gyp
Para compilar módulos Node con las cabeceras de Electron, debes indicar a `node-gyp`
desde dónde descargar las cabeceras y cuál versión usar:
```bash
$ cd /path-to-module/
$ HOME=~/.electron-gyp node-gyp rebuild --target=0.29.1 --arch=x64 --dist-url=https://atom.io/download/electron
```
Los cambios en `HOME=~/.electron-gyp` fueron para especificar la ruta de las cabeceras.
La opción `--target=0.29.1` es la versión de Electron. La opción `--dist-url=...` especifica
dónde descargar las cabeceras. `--arch=x64` indica que el módulo será compilado para un sistema de 64bit.
### La forma npm
También puedes usar `npm` para instalar módulos, los pasos son exactamente igual a otros módulos Node,
con la excepción de que necesitas establecer algunas variables de entorno primero:
```bash
export npm_config_disturl=https://atom.io/download/electron
export npm_config_target=0.29.1
export npm_config_arch=x64
HOME=~/.electron-gyp npm install module-name
```

View file

@ -1,55 +0,0 @@
# Utilizando el plugin Pepper Flash
El plugin Pepper Flash es soportado ahora. Para utilizar pepper flash en Electron, debes especificar la ubicación del plugin manualmente y activarlo en tu aplicación.
## Preparar una copia del plugin Flash
En macOS y Linux, el detalle del plugin puede encontrarse accediendo a `chrome://plugins` en el navegador. Su ubicación y versión son útiles para el soporte. También puedes copiarlo a otro lugar.
## Agrega la opción a Electron
Puedes agregar la opción `--ppapi-flash-path` y `ppapi-flash-version` o utilizar el método `app.commandLine.appendSwitch` antes del evento ready de la aplicación.
También puedes agregar la opción `plugins` de `browser-window`. Por ejemplo,
```javascript
var app = require('app')
var BrowserWindow = require('browser-window')
// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the javascript object is GCed.
var mainWindow = null
// Quit when all windows are closed.
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') {
app.quit()
}
})
// Specify flash path.
// On Windows, it might be /path/to/pepflashplayer.dll
// On macOS, /path/to/PepperFlashPlayer.plugin
// On Linux, /path/to/libpepflashplayer.so
app.commandLine.appendSwitch('ppapi-flash-path', '/path/to/libpepflashplayer.so')
// Specify flash version, for example, v17.0.0.169
app.commandLine.appendSwitch('ppapi-flash-version', '17.0.0.169')
app.on('ready', function () {
mainWindow = new BrowserWindow({
'width': 800,
'height': 600,
'web-preferences': {
'plugins': true
}
})
mainWindow.loadURL(`file://${__dirname}/index.html`)
// Something else
})
```
## Activar el plugin flash en una etiqueta `<webview>`
Agrega el atributo `plugins`.
```html
<webview src="http://www.adobe.com/software/flash/about/" plugins></webview>
```

View file

@ -1,72 +0,0 @@
# Utilizando Selenium y WebDriver
De [ChromeDriver - WebDriver for Chrome][chrome-driver]:
> WebDriver es una herramienta de código abierto para automatizar el testing de aplicaciones web
> en varios navegadores. WebDriver provee funciones de navegación, entrada de usuario,
> ejecución de JavaScript, y más. ChromeDriver es un servidor standalone que implementa
> el protocolo de WebDriver para Chromium. Se encuentra en desarrollo por los miembros de
> Chromium y WebDriver.
En la página de [lanzamientos](https://github.com/electron/electron/releases) de Electron encontrarás paquetes de `chromedriver`.
## Ajustando parámetros con WebDriverJs
[WebDriverJs](https://code.google.com/p/selenium/wiki/WebDriverJs) provee
un paquete Node para realizar testing con web driver, lo usaremos como ejemplo.
### 1. Inicia chrome driver
Primero necesitas descargar el binario `chromedriver` y ejecutarlo:
```bash
$ ./chromedriver
Starting ChromeDriver (v2.10.291558) on port 9515
Only local connections are allowed.
```
Recuerda el puerto `9515`, lo utilizaremos después.
### 2. Instala WebDriverJS
```bash
$ npm install selenium-webdriver
```
### 3. Conecta chrome driver
El uso de `selenium-webdriver` junto con Electron es básicamente el mismo que el original,
excepto que necesitas especificar manualmente cómo se conectará el chrome driver
y dónde encontrará el binario de Electron:
```javascript
var webdriver = require('selenium-webdriver')
var driver = new webdriver.Builder()
// El puerto "9515" es que abre chrome driver.
.usingServer('http://localhost:9515')
.withCapabilities({chromeOptions: {
// Aquí especificamos la ruta a Electron
binary: '/Path-to-Your-App.app/Contents/MacOS/Atom'}})
.forBrowser('electron')
.build()
driver.get('http://www.google.com')
driver.findElement(webdriver.By.name('q')).sendKeys('webdriver')
driver.findElement(webdriver.By.name('btnG')).click()
driver.wait(function () {
return driver.getTitle().then(function (title) {
return title === 'webdriver - Google Search'
})
}, 1000)
driver.quit()
```
## Workflow
Para probar tu aplicación sin recompilar Electron, simplemente [copia](https://github.com/electron/electron/blob/master/docs/tutorial/application-distribution.md) las fuentes de tu aplicación en el directorio de recursos de Electron.
[chrome-driver]: https://sites.google.com/a/chromium.org/chromedriver/

View file

@ -1,91 +0,0 @@
Vérifiez que vous utilisez la bonne version de la documentation.
Le numéro de version devrait faire partie de l'URL de la page.
Si ce n'est pas le cas, vous utilisez probablement la documentation d'une
branche de développement qui peut contenir des changements API qui ne sont pas
compatibles avec votre version d'Electron. Si c'est le cas, vous pouvez changer
de version sur la liste [versions disponibles](https://electron.atom.io/docs/),
ou, si vous utilisez l'interface de GitHub, ouvrez la liste déroulante "Switch
branches/tags" afin de sélectionner le tag de votre version.
## FAQ
Avant de créer un ticket, vérifiez que votre problème n'a pas déjà sa réponse
dans la FAQ :
* [Electron FAQ](faq/electron-faq.md)
## Guides
* [Plateformes supportées](tutorial/supported-platforms.md)
* [Distribution de l'Application](tutorial/application-distribution.md)
* [Guide de Soumission Mac App Store](tutorial/mac-app-store-submission-guide.md)
* [Créer une archive](tutorial/application-packaging.md)
* [Utiliser Modules Natifs de Node](tutorial/using-native-node-modules.md)
* [Debugger Processus Principal](tutorial/debugging-main-process.md)
* [Utiliser Selenium et WebDriver](tutorial/using-selenium-and-webdriver.md)
* [Extension DevTools](tutorial/devtools-extension.md)
* [Utiliser le Plugin Pepper Flash](tutorial/using-pepper-flash-plugin.md)
* [Utiliser le Plugin Widevine CDM](tutorial/using-widevine-cdm-plugin.md)
## Tutoriels
* [Démarrage Rapide](tutorial/quick-start.md)
* [Intégration Environnement de Bureau](tutorial/desktop-environment-integration.md)
* [Détection des Evènements En ligne/Hors ligne](tutorial/online-offline-events.md)
## Références API
* [Synopsis](api/synopsis.md)
* [L'objet Process](api/process.md)
* [Commandes Chromes Supportées](api/chrome-command-line-switches.md)
* [Variables d'Environnement](api/environment-variables.md)
### Eléments DOM Personnalisés:
* [Objet `File`](api/file-object.md)
* [Tag `<webview>`](api/webview-tag.md)
* [Fonction `window.open`](api/window-open.md)
### Modules pour le Processus Principal :
* [app](api/app.md)
* [autoUpdater](api/auto-updater.md)
* [BrowserWindow](api/browser-window.md)
* [contentTracing](api/content-tracing.md)
* [dialog](api/dialog.md)
* [globalShortcut](api/global-shortcut.md)
* [ipcMain](api/ipc-main.md)
* [Menu](api/menu.md)
* [MenuItem](api/menu-item.md)
* [powerMonitor](api/power-monitor.md)
* [powerSaveBlocker](api/power-save-blocker.md)
* [protocol](api/protocol.md)
* [session](api/session.md)
* [webContents](api/web-contents.md)
* [Tray](api/tray.md)
### Modules pour le Processus d'Affichage (Page Web) :
* [desktopCapturer](api/desktop-capturer.md)
* [ipcRenderer](api/ipc-renderer.md)
* [remote](api/remote.md)
* [webFrame](api/web-frame.md)
### Modules pour les deux Processus :
* [clipboard](api/clipboard.md)
* [crashReporter](api/crash-reporter.md)
* [nativeImage](api/native-image.md)
* [screen](api/screen.md)
* [shell](api/shell.md)
## Développement
* [Style de Code](development/coding-style.md)
* [Hiérarchie du Code Source](development/source-code-directory-structure.md)
* [Différences Techniques par rapport à NW.js (anciennement node-webkit)](development/atom-shell-vs-node-webkit.md)
* [Aperçu du Système de Build](development/build-system-overview.md)
* [Instructions de Build (macOS)](development/build-instructions-osx.md)
* [Instructions de Build (Windows)](development/build-instructions-windows.md)
* [Instructions de Build (Linux)](development/build-instructions-linux.md)
* [Installer un Serveur de Symbol dans le debugger](development/setting-up-symbol-server.md)

View file

@ -1,129 +0,0 @@
# Electron FAQ
## Quand est mise à jour la version de Chrome utilisée par Electron ?
La version de Chrome qu'utilise Electron est en général mise à jour une ou deux
semaines après la sortie d'une nouvelle version stable de Chrome.
Etant donné que nous n'utilisons que les versions stables de Chrome, si un fix
important est en beta ou en dev, nous l'intégrerons à la version que nous
utilisons.
## Quand est mise à jour la version de Node.js utilisée par Electron ?
Quand une nouvelle version de Node.js sort, nous attendons en général un mois
avant de mettre à jour celle que nous utilisons dans Electron. Ceci afin
d'éviter les bugs introduits par les nouvelles versions, ce qui arrive très
souvent.
Les nouvelles fonctionnalités de Node.js arrivant la plupart du temps via V8,
et Electron utilisant le V8 du navigateur Chrome, la nouvelle fonctionnalité
JavaScript de la nouvelle version de Node.js est bien souvent déjà dans
Electron.
## La fenêtre/barre d'état de mon application disparait après quelques minutes.
Cela se produit quand la variable qui est utilisée pour stocker la fenêtre/barre
d'état est libérée par le ramasse-miettes.
Nous vous recommandons de lire les articles suivants quand vous rencontrez le
problème :
* [Management de la Mémoire][memory-management] (Anglais)
* [Portée d'une Variable][variable-scope] (Anglais)
Si vous voulez corriger rapidement le problème, vous pouvez rendre les variables
globales en changeant votre code de ça :
```javascript
app.on('ready', function () {
var tray = new Tray('/path/to/icon.png')
})
```
à ça :
```javascript
var tray = null
app.on('ready', function () {
tray = new Tray('/path/to/icon.png')
})
```
## Je n'arrive pas à utiliser jQuery/RequireJS/Meteor/AngularJS dans Electron.
A cause de l'intégration de Node.js dans Electron, certains mots-clés sont
insérés dans la DOM, comme `module`, `exports`, `require`. Ceci pose des
problèmes pour certaines bibliothèques qui utilisent les mêmes mots-clés.
Pour résoudre ce problème, vous pouvez désactiver l'intégration de node dans
Electron :
```javascript
// Dans le processus principal.
var mainWindow = new BrowserWindow({
webPreferences: {
nodeIntegration: false
}
})
```
Mais si vous voulez garder la possibilité d'utiliser Node.js et les APIs
Electron, vous devez renommer les mots-clés dans la page avant d'inclure
d'autres bibliothèques :
```html
<head>
<script>
window.nodeRequire = require;
delete window.require;
delete window.exports;
delete window.module;
</script>
<script type="text/javascript" src="jquery.js"></script>
</head>
```
## `require('electron').xxx` is undefined.
Lors de l'utilisation des modules d'Electron, vous pouvez avoir une erreur :
```
> require('electron').webFrame.setZoomFactor(1.0);
Uncaught TypeError: Cannot read property 'setZoomLevel' of undefined
```
Ceci se produit quand vous avez le [module npm `electron`][electron-module]
d'installé, soit en local ou en global, ce qui a pour effet d'écraser les
modules de base d'Electron.
Vous vérifiez que vous utilisez les bons modules, vous pouvez afficher le
chemin du module `electron` :
```javascript
console.log(require.resolve('electron'))
```
et vérifier si il est de la forme :
```
"/path/to/Electron.app/Contents/Resources/atom.asar/renderer/api/lib/exports/electron.js"
```
S'il est de la forme `node_modules/electron/index.js`, vous devez supprimer le
module npm `electron`, ou le renommer.
```bash
npm uninstall electron
npm uninstall -g electron
```
Si vous utilisez le module de base mais que vous continuez d'avoir
l'erreur, ça vient probablement du fait que vous utilisez le module dans le
mauvais processus. Par exemple `electron.app` peut uniquement être utilisé
dans le processus principal, tandis que `electron.webFrame` est uniquement
disponible dans le processus d'affichage.
[memory-management]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management
[variable-scope]: https://msdn.microsoft.com/library/bzt2dkta(v=vs.94).aspx
[electron-module]: https://www.npmjs.com/package/electron

View file

@ -1,101 +0,0 @@
# Règles de style pour la documentation d'Electron
Choisissez la section appropriée : [lire la documentation d'Electron](#reading-electron-documentation)
ou [écrire de la documentation pour Electron](#writing-electron-documentation).
## Ecrire de la documentation pour Electron
La documentation d'Electron a été écrite en suivant les règles ci-dessous :
- Maximum un titre `h1` par page.
- Utilisation de `bash` au lieu de `cmd` dans les blocs de code (à cause de la
coloration syntaxique).
- Les titres `h1` devraient reprendre le nom de l'objet (i.e. `browser-window`
`BrowserWindow`).
- Cependant, les traits d'union sont acceptés pour les noms de fichier.
- Pas de titre directement après un autre, ajoutez au minimum une ligne de
description entre les deux.
- Les entêtes des méthodes sont entre accents graves (backquotes) `code`.
- Les entêtes des évènements sont entre des apostrophes 'quotation'.
- Les listes ne doivent pas dépasser 2 niveaux (à cause du formattage du
markdown).
- Ajouter des titres de section: Evènements, Méthodes de classe, et Méthodes
d'instance.
- Utiliser 'will' au lieu de 'would' lors de la description du retour.
- Les évènements et méthodes sont des titres `h3`.
- Les arguments optionnels sont notés `function (required[, optional])`.
- Les arguments optionnels sont indiqués quand appelés dans la liste.
- La longueur des lignes ne dépasse pas 80 caractères.
- Les méthodes spécifiques à une plateforme sont notées en italique.
- ```### `method(foo, bar)` _macOS_```
- Préférer 'in the ___ process' au lieu de 'on'
### Traductions de la Documentation
Les traductions de la documentation d'Electron sont dans le dossier
`docs-translations`.
Pour ajouter une nouvelle langue (ou commencer) :
- Créer un sous-dossier avec comme nom le code langage.
- A l'intérieur de ce dossier, dupliquer le dossier `docs`, en gardant le même
nom de dossiers et de fichiers.
- Traduire les fichiers.
- Mettre à jour le `README.md` à l'intérieur du dossier de langue en mettant les
liens vers les fichiers traduits.
- Ajouter un lien vers le nouveau dossier de langue dans le [README](https://github.com/electron/electron#documentation-translations)
principal d'Electron.
## Lire la documentation d'Electron
Quelques indications pour comprendre la syntaxe de la documentation d'Electron.
### Méthodes
Un exemple de la documentation d'une [méthode](https://developer.mozilla.org/en-US/docs/Glossary/Method)
(Anglais)
---
`methodName(required[, optional]))`
* `require` String (**required**)
* `optional` Integer
---
Le nom de la méthode est suivi des arguments de celle-ci. Les arguments
optionnels sont notés entre crochets, avec une virgule si ceux-ci suivent un
autre argument.
En-dessous de la méthode, chaque argument est détaillé avec son type.
Celui-ci peut être un type générique :
[`String`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String),
[`Number`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number),
[`Object`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object),
[`Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)
ou un type personnalisé comme le [`webContent`](api/web-content.md) d'Electron.
### Evènements
Un exemple d'une documentation d'un [évènement](https://developer.mozilla.org/en-US/docs/Web/API/Event)
(Anglais)
---
Event: 'wake-up'
Returns:
* `time` String
---
L'évènement est une chaine utilisée après un listener `.on`. Si il retourne une
valeur, elle est écrite en dessous ainsi que son type. Si vous voulez écouter et
répondre à l'évènement wake-up, ça donne quelque chose comme :
```javascript
Alarm.on('wake-up', function (time) {
console.log(time)
})
```

View file

@ -1,14 +0,0 @@
# Versionage d'Electron
Si vous êtes un développeur Node expérimenté, vous êtes sûrement au courant de `semver` - et pourrez l'utiliser pour donner à vos systèmes de gestion de dépendances seulement des lignes directrices générales plutôt que des numéros de version fixes. En raison d'une forte dépendence avec Node et
Chromium, Electron est dans une position quelque peu difficile et ne suit pas
semver. Vous devez donc toujours faire référence à une version spécifique d'Electron.
Les numéros de version sont mis à jour selon les règles suivantes:
* Majeur: Pour les gros changements entrainant des ruptures dans l'API d'Electron - Si vous passez de la version `0.37.0`
à `1.0.0`, vous devrez effectuer une migration de votre application.
* Mineur: Pour des changements majeurs de Chrome et des changements mineurs de Node; ou des changements importants d'Electron - si vous mettez à jour de `1.0.0` vers `1.1.0`, le plus gros de votre application fonctionnera, seuls de petits changements seront à effectuer.
* Patch: Pour de nouvelles fonctionalités et des résolutions de bugs - si vous passez de la version `1.0.0` à `1.0.1`, votre application continuera de s'exécuter telle quelle.
Si vous utilisez `electron` ou `electron-prebuilt`, nous vous recommandons de fixer le numéro de version (`1.1.0` au lieu de `^1.1.0`) pour être sûr que toutes les mises à jour d'Electron sont une opération manuelle faite par vous, le développeur.

View file

@ -1,245 +0,0 @@
# Démarrage Rapide
Electron vous permet de créer des applications de bureau avec du JavaScript
fournissant un runtime avec des API riches natives (système d'exploitation).
Vous pourriez le voir comme une variante d'un Node.js directement exécutable
sur le bureau au lieu des serveurs Web.
Cela ne signifie pas que Electron est une liaison JavaScript à l'interface
utilisateur graphique (GUI). Au lieu de cela, Electron utilise des pages
Web comme GUI, donc vous pouvez aussi le voir comme un navigateur minimal
Chromium, contrôlé par JavaScript.
### Processus principal
Dans Electron, le processus qui exécute le script `main` de` package.json`
est appelé __le processus principal__. Le script qui s'exécute dans le
processus principal peut afficher une interface graphique en créant des
pages Web.
### Processus de rendu
Puisque Electron utilise Chromium pour afficher des pages Web, Chromium
Multi-process architecture est également utilisé. Chaque page Web d'Electron
fonctionne avec son propre processus, qui est appelé __le processus de rendu__.
Dans les navigateurs normaux, les pages Web sont habituellement exécutées
dans un environnement aux ressources indépendantes. Les utilisateurs d'électrons
ont cependant le pouvoir d'utiliser les API Node.js dans des pages Web permettant
un système d'exploitation de niveau inférieur d'interactions.
### Différences entre le processus principal et le processus de rendu
Le processus principal crée des pages Web en créant des instances `BrowserWindow`.
Chaque instance `BrowserWindow` exécute la page Web dans son propre processus
de rendu. Lorsqu'une occurrence `BrowserWindow` est détruite, le processus
de rendu correspondant est également terminé.
Le processus principal gère toutes les pages Web et leur processus rendu correspondant.
Chaque processus de rendu est isolé et ne se soucie que de la page Web en cours
d'exécution.
Dans les pages Web, l'appel des API relatives aux GUI natives n'est pas autorisé
car la gestion des ressources natives GUI dans les pages Web est très dangereuse,
il est facile de perdre des ressources. Si vous souhaitez effectuer des opérations
GUI dans une page Web, le Processus de la page Web doit communiquer avec le
processus principal pour lui demander d'effectuer ces opérations.
Dans Electron, nous avons plusieurs façons de communiquer entre le processus principal et
le processeurs. Comme [`ipcRenderer`](../api/ipc-renderer.md) et [`ipcMain`](../api/ipc-main.md) pour envoyer des messages, et les [Remote](../api/remote.md)
pour la communication de style RPC. Il y a aussi une entrée de FAQ sur
[comment partager des données entre des pages Web][share-data].
## Écrivez votre première application Electron
Généralement, une application Electron est structurée comme ceci :
```text
your-app/
├── package.json
├── main.js
└── index.html
```
Le format de `package.json` est exactement le même que celui des modules de Node, et
le script spécifié par le champ `main` est le script de démarrage de votre application,
qui exécutera le processus principal. Un exemple de votre `package.json` peut être
comme cela :
```json
{
"name" : "your-app",
"version" : "0.1.0",
"main" : "main.js"
}
```
__Note__ : Si le champ `main` n'est pas présent dans` package.json`, Electron
tentera de charger un fichier `index.js`.
Le fichier `main.js` devrait créer des fenêtres et gérer les événements du système.
Exemple :
```javascript
const {app, BrowserWindow} = require('electron')
const path = require('path')
const url = require('url')
// Gardez une référence globale de l'objet fenêtre, sinon, la fenêtre
// sera automatiquement fermée lorsque l'objet JavaScript est récupéré.
let win
function createWindow () {
// Créer la fenêtre du navigateur.
win = new BrowserWindow({width: 800, height: 600})
// charger index.html de l'application.
win.loadURL(url.format({
pathname: path.join(__dirname, 'index.html'),
protocol: 'file:',
slashes: true
}))
// Ouvrir DevTools.
win.webContents.openDevTools()
// Émis lorsque la fenêtre est fermée.
win.on('closed', () => {
// Déréférencer l'objet fenêtre, habituellement vous stockez des fenêtres
// dans un tableau si votre application prend en charge plusieurs fenêtres,
// c'est l'heure où vous devez supprimer l'élément correspondant.
win = null
})
}
// Cette méthode sera appelée lorsque Electron aura terminé l'initialisation
// et est prét à créer des fenêtres de navigation. Certaines API ne peuvent
// être utilisées qu'après le lancement de cet événement.
app.on('ready', createWindow)
// Quittez lorsque toutes les fenêtres sont fermées.
app.on('window-all-closed', () => {
// Sur macOS, il est fréquent que les applications et leur barre de menus
// restent actives jusqu'à ce que l'utilisateur quitte explicitement avec Cmd + Q
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
// Sur macOS, il est fréquent de recréer une fenêtre dans l'application lorsque
// l'icône du dock est cliquée et qu'il n'y a pas d'autres fenêtres ouvertes.
if (win === null) {
createWindow()
}
})
// Dans ce fichier, vous pouvez inclure le reste du code du processus principal
// spécifique de votre application. Vous pouvez également les mettres dans des
// fichiers distincts et les écrire ici.
```
Enfin, `index.html` est la page web que vous voulez afficher :
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
</head>
<body>
<h1>Hello World!</h1>
Nous utilisons le noeud <script>document.write(process.versions.node)</script>,
Chrome <script>document.write(process.versions.chrome)</script>,
et Electron <script>document.write(process.versions.electron)</script>.
</body>
</html>
```
## Exécuter votre application
Une fois que vous avez créé vos fichiers `main.js`,` index.html` et `package.json`,
vous voudriez probablement essayer d'exécuter votre application localement pour la
tester et vous assurer qu'elle fonctionne comme prévu.
### `electron`
[`electron`](https://github.com/electron-userland/electron-prebuilt) est
un module `npm` qui contient des versions pré-compilées d'Electron.
Si vous l'avez installé globalement avec `npm`, vous n'en aurez pas besoin
dans le répertoire source de votre application :
```bash
electron .
```
Si vous l'avez installé localement :
#### macOS / Linux
```bash
$ ./node_modules/.bin/electron .
```
#### Windows
```bash
$ .\node_modules\.bin\electron .
```
### Executable d'Electron téléchargé manuellement
Si vous avez téléchargé Electron manuellement, vous pouvez également utiliser
binaire pour exécuter votre application directement.
#### Windows
```bash
$ .\electron\electron.exe your-app\
```
#### Linux
```bash
$ ./electron/electron your-app/
```
#### macOS
```bash
$ ./Electron.app/Contents/MacOS/Electron your-app/
```
`Electron.app` fait partie du package de libération de l'Electron, vous pouvez
télécharger à partir [ici](https://github.com/electron/electron/releases).
### Exécuter en tant que distribution
Une fois que vous avez terminé d'écrire votre application, vous pouvez
créer une distribution en suivant le guide [Distribuer une application](./application-distribution.md) puis exécuter l'application packagée.
### Essayez cet exemple
Clonez et exécutez le code dans ce didacticiel en utilisant le
[`electron/electron-quick-start`](https://github.com/electron/electron-quick-start).
**Note** : Exécuter cela nécessite [Git](https://git-scm.com) et [Node.js](https://nodejs.org/en/download/) (que comprend [npm](https://npmjs.org)) sur votre système.
```bash
# Clone the repository
$ git clone https://github.com/electron/electron-quick-start
# Go into the repository
$ cd electron-quick-start
# Install dependencies
$ npm install
# Run the app
$ npm start
```
Pour plus d'exemples app, consultez la section
[list of boilerplates](https://electron.atom.io/community/#boilerplates)
Créé par la communauté impressionnante d'électrons.
[share-data]: ../faq.md#how-to-share-data-between-web-pages

View file

@ -1,75 +0,0 @@
# Securité, Application Natives, et Votre Responsabilité
En tant que développeurs Web, nous avons l'habitude de bénéficier d'une sécurité élevée au niveau du navigateur - les
risques associés au code que nous écrivons sont relativement faibles. Nos sites internet ont des droits limités au sein
d'une sandbox, et nous faisons confiance à nos utilisateurs pour utiliser des navigateurs créés par de grosses équipes d'ingénieurs
capables de réagir rapidement lorsqu'une faille de sécurité est découverte.
Quand on travaille avec Electron, il est important de comprendre qu'Electron n'est pas un navigateur web.
Il vous permet de construire des applications de bureau riches de fonctionnalités au travers de technologies web familières,
mais votre code a beaucoup plus de possibilités. Javascript peut accéder au système de fichiers, au shell, et plus.
Cela vous permet de construire des applications natives de haute qualité, mais les problèmes de sécurité sont inhérents à toutes ces possibilités.
Avec ça en tête, soyez conscient qu'afficher du contenu arbitraire depuis des sources extérieures pose un gros risque au niveau de la sécurité qu'Electron ne peut gérer.
En fait, les applications utilisant Electron les plus populaires (Atom, Slack, Visual Studio Code, ...etc) affichent principalement du contenu local (ou de confiance, il s'agit alors de contenu distant sécurisé sans intégration avec Node) - si votre application exécute du code depuis une source extérieure, il est de votre responsabilité de vous assurer que ce code n'est pas malveillant.
## Problèmes de sécurité liés à Chromium et mises à jour
Tandis qu'Electron essaie de supporter les nouvelles versions de Chromium dès que possible,
les developpeurs doivent garder à l'esprit que le fait de mettre à jour l'application est une tâche laborieuse durant laquelle plusieurs douzaines, voire plusieurs centaines de fichiers doivent être modifiés à la main.
Selon les ressources et les contributions actuelles, Electron ne fonctionnera pas toujours avec la dernière version de Chromium, un délai de quelques jours voire quelques semaines est à prévoir.
Nous pensons que notre système actuel de mises à jour du composant Chromium correspond à un
équilibre approprié entre les ressources dont nous disposons et les besoins de la
majorité des applications construites autour du framework.
Les Pull requests et les contributions supportant cet effort sont toujours les bienvenues.
## Ignorer les conseils précédents
Un problème de sécurité existe quand vous recevez du code depuis une source distante puis l'exécutez localement. Prenons comme exemple l'affichage d'un site web distant affiché à l'intérieur d'une fenêtre de navigateur.
Si un attaquant parvient d'une quelconque façon de changer son contenu
(soit en attaquant la source directement, ou bien en se placant entre votre application et sa destination actuelle), ils seront capables d'executer du code natif sur la machine de l'utilisateur.
> :warning: En aucun cas vous ne devez charger puis exécuter du code distant avec Node. A la place, utilisez seulement des fichiers locaux (regroupés avec votre application) pour exécuter du code de Node. Pour afficher du contenu distant, utilisez le tag
`webview` et assurez vous de désactiver `nodeIntegration`.
#### Checklist
Il ne s'agit pas d'une liste exhaustive, mais au moins, pour palier aux problèmes de sécurités vous devez essayer de:
* Afficher seulement du contenu (https) sécurisé
* Désactiver l'intégration de Node dans tout ce qui gère le rendu avec du contenu distant
(using `webPreferences`)
* Ne pas désactiver `webSecurity`. Disabling it will disable the same-origin policy.
* Définir une [`Content-Security-Policy`](http://www.html5rocks.com/en/tutorials/security/content-security-policy/)
, et utiliser des règles strictes (i.e. `script-src 'self'`)
* [Surcharger et désactiver `eval`](https://github.com/nylas/N1/blob/0abc5d5defcdb057120d726b271933425b75b415/static/index.js#L6-L8)
, qui permet à des chaînes de caractères d'être exécutées comme du code.
* Ne pas assigner `allowRunningInsecureContent` à true.
* Ne pas activer `experimentalFeatures` ou `experimentalCanvasFeatures` à moins d'être sûr ce que vous faites.
* Ne pas utiliser `blinkFeatures` à moins d'être sûr ce que vous faites.
* WebViews: Assigner `nodeintegration` à false
* WebViews: Ne pas utiliser `disablewebsecurity`
* WebViews: Ne pas utiliser `allowpopups`
* WebViews: Ne pas utiliser `insertCSS` ou `executeJavaScript` avec du CSS/JS distant.
Encore une fois, cette liste permet de diminuer les risques de problème de sécurité, mais en aucun cas elle ne l'enlève complètement. Si votre objectif est d'afficher un site internet, choisir un navigateur sera une option plus sûre.
## Buffer Global
La classe [Buffer](https://nodejs.org/api/buffer.html) de Node est actuellement disponible
en tant que global même quand `nodeIntegration` est à `false`. Vous pouvez le supprimer en faisant la manipulation suivante dans votre script `preload`:
```js
delete global.Buffer
```
Le supprimer peut casser les modules Node utilisés dans votre script preload script et votre application depuis que plusieurs librairies s'attendent à ce qu'il soit en tant que global plutôt que de le demander de manière explicite via:
```js
const {Buffer} = require('buffer')
```
Le `Buffer` global risque d'être supprimé dans de futures versions d'Electron.

View file

@ -1,26 +0,0 @@
# Plateformes supportées
Les plateformes suivantes sont supportées par Electron:
### macOS
Seuls les binaires en 64bit sont fournis sur macOS, et la version minimale de macOS suportée est macOS 10.9.
### Windows
Les systèmes d'exploitations Windows 7 et supérieur sont supportés. Les versions antérieures ne sont pas supportées (et ne marchent pas).
Les binaires `ia32` (`x86`) et `x64` (`amd64`) sont fournis pour Windows.
Veuillez noter que la version `ARM` de Windows n'est pas supportée à ce jour.
### Linux
Les binaires précompilés `ia32` (`i686`) et `x64` (`amd64`) d'Electron sont compilés sous
Ubuntu 12.04, le binaire `arm` est compilé à partir d'une version ARM v7 hard-float ABI et
NEON pour Debian Wheezy.
Pour que les binaires pré-compilés puissent s'exécuter sur une certaine distribution, il faut que cette distribution inclut les librairies dont Electron a besoin. C'est à dire que seulement Ubuntu 12.04 est garanti de fonctionner, même si les plateformes suivantes sont aussi verifiées et capables d'exécuter les binaires pré-compilés d'Electron:
* Ubuntu 12.04 et suivantes
* Fedora 21
* Debian 8

View file

@ -1,84 +0,0 @@
[![Electron Logo](https://electron.atom.io/images/electron-logo.svg)](https://electron.atom.io/)
[![Travis Build Status](https://travis-ci.org/electron/electron.svg?branch=master)](https://travis-ci.org/electron/electron)
[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/bc56v83355fi3369/branch/master?svg=true)](https://ci.appveyor.com/project/electron-bot/electron/branch/master)
[![devDependency Status](https://david-dm.org/electron/electron/dev-status.svg)](https://david-dm.org/electron/electron?type=dev)
[![Join the Electron Community on Slack](http://atom-slack.herokuapp.com/badge.svg)](http://atom-slack.herokuapp.com/)
:memo: Terjemahan yg tersedia: [Korean](https://github.com/electron/electron/tree/master/docs-translations/ko-KR/project/README.md) | [Simplified Chinese](https://github.com/electron/electron/tree/master/docs-translations/zh-CN/project/README.md) | [Brazilian Portuguese](https://github.com/electron/electron/tree/master/docs-translations/pt-BR/project/README.md) | [Traditional Chinese](https://github.com/electron/electron/tree/master/docs-translations/zh-TW/project/README.md) | [Spanish](https://github.com/electron/electron/tree/master/docs-translations/es/project/README.md) | [Turkish](https://github.com/electron/electron/tree/master/docs-translations/tr-TR/project/README.md)
Framework Electron membuat Anda bisa menulis aplikasi desktop yang cross-platform menggunakan JavaScript, HTML dan CSS. Framework ini bersumber dari
[Node.js](https://nodejs.org/) dan
[Chromium](http://www.chromium.org) dan dipakai dalam
[Atom editor](https://github.com/atom/atom) dan applikasi-applikasi lainnya [apps](https://electron.atom.io/apps).
Ikuti [@ElectronJS](https://twitter.com/electronjs) lewat Twitter untuk informasi-informasi penting.
Proyek ini mengikuti perjanjian kontributor [code of conduct](CODE_OF_CONDUCT.md).
Partisipasi Anda di proyek ini harus mengikuti panduan di atas. Harap laporkan perbuatan yg kurang berkenan melalui electron@github.com.
## Unduhan
Untuk instalasi versi binari Electron, pakai
[`npm`](https://docs.npmjs.com/):
```sh
# Install as a development dependency
npm install electron --save-dev
# Install the `electron` command globally in your $PATH
npm install electron -g
```
Ikuti [releases page](https://github.com/electron/electron/releases) untuk prebuilt binaries, debug symbols, dan lain-lain.
### Mirrors
- [China](https://npm.taobao.org/mirrors/electron)
## Dokumentasi
Panduan dan referensi API bisa ditemukan di direktori
[docs](https://github.com/electron/electron/tree/master/docs). Direktori tersebut juga berisi dokumen-dokumen yg menunjukkan bagaimana Anda bisa berkontribusi ke proyek Electron.
## Terjemahan Dokumentasi
- [Brazilian Portuguese](https://github.com/electron/electron/tree/master/docs-translations/pt-BR)
- [Korean](https://github.com/electron/electron/tree/master/docs-translations/ko-KR)
- [Japanese](https://github.com/electron/electron/tree/master/docs-translations/jp)
- [Spanish](https://github.com/electron/electron/tree/master/docs-translations/es)
- [Simplified Chinese](https://github.com/electron/electron/tree/master/docs-translations/zh-CN)
- [Traditional Chinese](https://github.com/electron/electron/tree/master/docs-translations/zh-TW)
- [Turkish](https://github.com/electron/electron/tree/master/docs-translations/tr-TR)
- [Thai](https://github.com/electron/electron/tree/master/docs-Translations/th-TH)
- [Ukrainian](https://github.com/electron/electron/tree/master/docs-translations/uk-UA)
- [Russian](https://github.com/electron/electron/tree/master/docs-translations/ru-RU)
- [French](https://github.com/electron/electron/tree/master/docs-translations/fr-FR)
- [Indonesian](https://github.com/electron/electron/tree/master/docs-translations/id)
## Mulai Cepat
Klon dan jalankan repo [`electron/electron-quick-start`](https://github.com/electron/electron-quick-start) untuk melihat aplikasi sederhana menggunakan Electron.
## Komunitas
Anda bisa berinteraksi di lokasi-lokasi ini:
- [`electron`](http://discuss.atom.io/c/electron) kategori forum Atom
- `#atom-shell` channel di Freenode
- [`Atom`](http://atom-slack.herokuapp.com/) channel di Slack
- [`electron-ru`](https://telegram.me/electron_ru) *(Russian)*
- [`electron-br`](https://electron-br.slack.com) *(Brazilian Portuguese)*
- [`electron-kr`](http://www.meetup.com/electron-kr/) *(Korean)*
- [`electron-jp`](https://electron-jp.slack.com) *(Japanese)*
- [`electron-tr`](http://electron-tr.herokuapp.com) *(Turkish)*
- [`electron-id`](https://electron-id.slack.com) *(Indonesia)*
Cek [awesome-electron](https://github.com/sindresorhus/awesome-electron)
untuk menemukan daftar contoh-contoh aplikasi dan sumber-sumber berguna lainnya.
## Lisensi
[MIT](https://github.com/electron/electron/blob/master/LICENSE)
Kalau menggunakan logo Electro ata logo Github lainnya gunakan panduan berikut [GitHub logo guidelines](https://github.com/logos).

View file

@ -1,92 +0,0 @@
# Menggunakan *Plugin Widevine CDM*
Di Electron, anda dapat menggunakan *plugin Widevine CDM* yang disertakan dengan
*browser* Chrome.
## Mendapatkan *plugin*
Elektron tidak disertakan dengan *plugin Widevine CDM* karena alasan lisensi,
untuk mendapatkanny, anda perlu menginstal *browser* Chrome resmi terlebih dahulu,
yang seharusnya cocok dengan arsitektur dan versi Chrome dari Elektron yang anda
gunakan.
**Catatan:** Versi utama *browser* Chrome harus sama dengan versi Chrome yang
digunakan oleh Electron, jika tidak cocok, *plugin* tidak akan bekerja sekalipun
`Navigator.plugins` akan menunjukkan bahwa ia telah dimuat.
### Windows & macOS
Buka `chrome://components/` di *browser* Chrome, cari `WidevineCdm` dan pastikan
apabila itu *up-to-date*, maka Anda dapat menemukan semua plugin binari dari direktori
`APP_DATA / Google / Chrome / WidevineCDM / VERSION / _platform_specific / PLATFORM_ARCH /`.
`APP_DATA` adalah lokasi sistem untuk menyimpan data aplikasi, di sistem Windows
itu ada di `% LOCALAPPDATA%`, di macOS itu ada di `~ / Library / Application Support`.
`VERSION` adalah versi *Widevine CDM plugin*, seperti `1.4.8.866`. `PLATFORM` adalah `mac`
atau `win`. `ARCH` adalah` x86` atau `x64`.
Di Windows, binari yang dibutuhkan adalah `widevinecdm.dll` dan
`Widevinecdmadapter.dll`, di macOS adalah` libwidevinecdm.dylib` dan
`Widevinecdmadapter.plugin`. Anda bisa menyalinnya ke manapun Anda suka, tapi
mereka harus di letakkan bersama.
### Linux
Di Linux, binari plugin disertakan bersama dengan *browser* Chrome, anda bisa
menemukannya di `/ opt / google / chrome`, nama filenya adalah` libwidevinecdm.so` dan
`Libwidevinecdmadapter.so`.
## Menggunakan *plugin*
Setelah mendapatkan *file* plugin, anda harus meneruskan `widevinecdmadapter`
ke Electron dengan baris perintah penghubung `--widevine-cdm-path`, dan versi
pluginnya dengan pengubung `--widevine-cdm-version`.
**Catatan:** Meskipun hanya binari `widevinecdmadapter` yang dilewatkan ke Electron, binari
`Widevinecdm` harus disertakan bersama.
Penghubung baris perintah harus dilewati sebelum `ready` dari` app` modul dipancarkan,
dan halaman yang menggunakan plugin ini harus mempunyai *plugin* yang sudah diaktifkan.
Contoh kode:
```javascript
const {app, BrowserWindow} = require('electron')
// Anda harus melewatkan filename `widevinecdmadapter` di sini, yang disebut adalah:
// * `widevinecdmadapter.plugin` on macOS,
// * `libwidevinecdmadapter.so` on Linux,
// * `widevinecdmadapter.dll` on Windows.
app.commandLine.appendSwitch('widevine-cdm-path', '/path/to/widevinecdmadapter.plugin')
// Versi plugin dapat didapatkan dari halaman `chrome://plugins` di Chrome.
app.commandLine.appendSwitch('widevine-cdm-version', '1.4.8.866')
let win = null
app.on('ready', () => {
win = new BrowserWindow({
webPreferences: {
// `plugins` harus diaktifkan.
plugins: true
}
})
win.show()
})
```
## Verifikasi plugin
Untuk memverifikasi jika plugin telah berhasil, anda dapat menggunakan cara berikut:
* Buka *devtools* dan periksa apakah `navigator.plugins` menyertakan *Widevine
Plugin CDM*
* Buka https://shaka-player-demo.appspot.com/ dan muat manifes yang menggunakan
`Widevine`.
* Buka http://www.dash-player.com/demo/drm-test-area/, periksa apakah di halamannya
terdapat `bitdash uses Widevine in your browser`, lalu putar videonya.

View file

@ -1,170 +0,0 @@
# Panduan Windows Store
Dengan Windows 10, eksekusi win32 yg lama mendapatkan saudara yang baru: *The
Universal Windows Platform*. Format `.appx` yang baru tidak hanya memungkinkan
sejumlah API yang baru dan hebat seperti *Cortana* atau *Push Notifications*,
tetapi juga melalui *Windows Store*, ini akan menyederhanakan instalasi dan update.
Microsoft [telah mengembangkan sebuah alat yang mengkompilasi aplikasi Elektron sebagai paket `.appx`][electron-windows-store], memungkinkan *developer* untuk menggunakan beberapa
sarana yang dapat ditemukan di model aplikasi baru. Panduan ini menjelaskan cara
menggunakannya - dan kemampuan dan keterbatasan paket Electron AppX.
## Latar Belakang dan Persyaratan
Windows 10 "Anniversary Update" dapat menjalankan win32 `.exe` *binaries* dengan cara
meluncurkan mereka bersama-sama dengan *filesystem* virtual dan pendaftaran . Keduanya
dibuat saat kompilasi dengan menjalankan aplikasi and instalasi di dalam *Windows
Container*, memungkinkan *Windows* untuk mengidentifikasi secara tepat modifikasi
sistem operasi mana yang dilakukan saat instalasi. Memasangkan eksekusi
*filesystem* virtual dan pendaftaran virtual yang memungkinkan *Windows* untuk
menjalankan *one-click* instalasi and menghapus instalasi.
Selain itu, exe diluncurkan di dalam bentuk appx - yang berarti bisa menggunakan
API banyak yang tersedia di *Windows Universal Platform*. Untuk mendapatkan
kemampuan yang lebih, aplikasi Electron dapat dipasangkan dengan *UWP background task*
tersembunyi yang dapat diluncurkan bersamaan dengan `exe` - seperti diluncurkan
sebagai dampingan untuk menjalankan *tasks* yang berjalan di *background*,
menerima *push-notification*, atau untuk berkomunikasi dengan aplikasi UWP lainnya.
Untuk mengkompilasi aplikasi Elektron yang ada, pastikan anda memenuhi
persyaratan berikut:
* Windows 10 with Anniversary Update (dikeluarkan August 2nd, 2016)
* The Windows 10 SDK, [unduh disini][windows-sdk]
* Setidaknya Node 4 (untuk mengecek, jalankan `node -v`)
Kemudian, instal `electron-windows-store` CLI:
```
npm install -g electron-windows-store
```
## Step 1: Kemas Aplikasi Elektron Anda
Kemas aplikasi menggunakan [electron-packager][electron-packager] (atau alat serupa).
Pastikan untuk menghapus `node_modules` yang tidak anda perlukan dalam aplikasi akhir
anda, karena modul yang tidak anda butuhkan hanya akan meningkatkan ukuran aplikasi anda.
Outputnya kira-kira akan terlihat seperti ini:
```
├── Ghost.exe
├── LICENSE
├── content_resources_200_percent.pak
├── content_shell.pak
├── d3dcompiler_47.dll
├── ffmpeg.dll
├── icudtl.dat
├── libEGL.dll
├── libGLESv2.dll
├── locales
│   ├── am.pak
│   ├── ar.pak
│   ├── [...]
├── natives_blob.bin
├── node.dll
├── resources
│   ├── app
│   └── atom.asar
├── snapshot_blob.bin
├── squirrel.exe
└── ui_resources_200_percent.pak
```
## 2: Menjalankan *electron-windows-store*
Dari *PowerShell* (jalankan sebagai "Administrator"), jalankan
`Electron-windows-store` dengan parameter yang dibutuhkan, menggunakan kedua
direktori *input* dan *output*, nama dan versi aplikasi, dan konfirmasi
`Node_modules` harus di *flatten*.
```
electron-windows-store `
--input-directory C:\myelectronapp `
--output-directory C:\output\myelectronapp `
--flatten true `
--package-version 1.0.0.0 `
--package-name myelectronapp
```
Setelah dijalankan, alat ini akan mulai bekerja: Ia akan menerima aplikasi Elektron
anda sebagai *input*, *flattening* `node_modules`. Kemudian, ia akan mengarsipkan
aplikasi anda sebagai `app.zip`. Dengan menggunakan *installer* dan *Windows Container*
, alat ini menciptakan paket AppX yang "diperluas" - termasuk *Windows Application
Manifest* (`AppXManifest.xml`) berserta dengan sistem *virtual file* dan pendaftaran
virtual di dalam map *output* anda.
Setelah *file* AppX yang diperluas telah dibuat, alat ini menggunakan
*Windows App Packager* (`MakeAppx.exe`) untuk menggabungkan paket AppX menjadi satu
*file* dari file-file yang ada di *disk*. Akhirnya, alat ini juga bisa digunakan
untuk membuat sertifikat terpercaya di komputer anda untuk menandatangani paket
AppX yang baru. Dengan paket AppX yang telah ditandatangani, CLI juga bisa
secara otomatis menginstal paket di mesin anda.
## 3: Menggunakan Paket AppX
Untuk menjalankan paket, pengguna akan memerlukan Windows 10 dengan apa
yang disebutnya *"Anniversary Update"* - rincian tentang cara memperbarui Windows
dapat ditemukan [di sini][how-to-update].
Di sisi lain dari aplikasi-aplikasi UWP tradisional, aplikasi yang terpaket saat ini
perlu menjalani proses verifikasi manual, yang dapat anda terapkan
[disini][centennial-campaigns]. Sementara itu, semua pengguna bisa menginstal
paket anda dengan mengklik dua kali, oleh sebab itu, pengiriman submisi ke toko
tidak diperlukan jika anda hanya mencari metode instalasi yang mudah. Di lingkungan
yang dikelola (biasanya perusahaan), `Add-AppxPackage` [PowerShell Cmdlet dapat digunakan untuk menginstalnya secara otomatis][add-appxpackage].
Keterbatasan penting lainnya adalah paket AppX yang telah dikompilasi masih berisi
*Win32 executable* - dan karena itu tidak akan berjalan di *Xbox*, *HoloLens*,
atau Telepon.
## Opsional: Tambahkan Fitur UWP menggunakan *BackgroundTask*
Anda dapat memasangkan aplikasi Elektron Anda dengan tugas *background* UWP yang
tersembunyi yang akan memanfaatkan sepenuhnya fitur Windows 10 - seperti *push-notification*,
integrasi Cortana, atau *live tiles*.
Untuk mencari tahu bagaimana aplikasi Elektron yang menggunakan *background task*
untuk mengirim *toast notification* dan *live tiles*, [lihat contoh yang disediakan Microsoft][background-task].
## Opsional: Mengkonversi menggunakan *Container Virtualization*
Untuk menghasilkan paket AppX, `elektron-windows-store` CLI menggunakan *template*
yang seharusnya bekerja untuk sebagian besar aplikasi Electron. Namun, jika anda
menggunakan *custom installer*, atau jika anda mengalami masalah dengan paket
yang dihasilkan, anda dapat mencoba membuat paket menggunakan kompilasi dengan
bantuan Windows Container - di dalam mode itu, CLI akan menginstal dan menjalankan
aplikasi Anda di dalam *Windows Container* yang kosong untuk menentukan
modifikasi apa yang aplikasi Anda lakukan pada sistem operasi.
Sebelum menjalankan CLI, anda harus mengatur *"Windows Desktop App Converter"*.
Ini akan memakan waktu beberapa menit, tapi jangan khawatir - anda hanya perlu
melakukan ini sekali saja. Unduh *Desktop App Converter* dari [di sini][app-converter].
Anda akan menerima dua file: `DesktopAppConverter.zip` dan` BaseImage-14316.wim`.
1. *Unzip* `DesktopAppConverter.zip`. Dari PowerShell (dibuka dengan
"jalankan sebagai Administrator", pastikan bahwa kebijakan eksekusi sistem
anda mengizinkan untuk menjalankan semua yang ingin dijalankan dengan menggunakan `Set-ExecutionPolicy bypass`.
2. Kemudian, jalankan instalasi *Desktop App Converter*, dengan menggunakan lokasi
*Windows Base Image* (di unduh sebagai `BaseImage-14316.wim`), dengan cara memanggil
perintah `. \ DesktopAppConverter.ps1 -Setup -BaseImage. \ BaseImage-14316.wim`.
3. Jika menjalankan perintah tersebut menyebabkan *reboot*, silakan *restart*
mesin anda dan mejalankan perintah yang telah disebutkan diatas setelah berhasil
*restart*.
Setelah instalasi telah berhasil, anda dapat melajutkan untuk mengkompilasi
aplikasi Electron anda.
[windows-sdk]: https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk
[app-converter]: https://www.microsoft.com/en-us/download/details.aspx?id=51691
[add-appxpackage]: https://technet.microsoft.com/en-us/library/hh856048.aspx
[electron-packager]: https://github.com/electron-userland/electron-packager
[electron-windows-store]: https://github.com/catalystcode/electron-windows-store
[background-task]: https://github.com/felixrieseberg/electron-uwp-background
[centennial-campaigns]: https://developer.microsoft.com/en-us/windows/projects/campaigns/desktop-bridge
[how-to-update]: https://blogs.windows.com/windowsexperience/2016/08/02/how-to-get-the-windows-10-anniversary-update

View file

@ -1,100 +0,0 @@
Sii certo di usare la documentazione che corrisponde alla tua versione di
Electron. Il numero della versione dovrebbe fare parte dell'URL della pagina.
Se cos<6F> non fosse, stai probabilmente utilizzando una documentazione facente
parte di una branch di sviluppo che potrebbe contenere modifiche all'API che non
sono compatibili con la tua versione di Electron. In questo caso, puoi passare a
una differente versione della documentazione dalla lista di
[versioni disponibili](https://electron.atom.io/docs/) su atom.io, o nel caso tu
stia usando l'interfaccia di GitHub, apri il menu a tendina "Switch
branches/tags" e seleziona il tag che corrisponde alla tua versione.
## FAQ
Ci sono domande che vengono chieste abbastanza spesso, quindi controlla questa
sezione prima di creare una issue:
* [Electron FAQ](faq.md)
## Guide
* [Piattaforme Supportate](tutorial/piattaforme-supportate.md)
* [Sicurezza](tutorial/sicurezza.md)
* [Versionamento Electron](tutorial/versionamento-electron.md)
* [Distribuzione dell'Applicazione](tutorial/distribuzione-applicazione.md)
* [Guida Mac App Store](tutorial/guida-mac-app-store.md)
* [Guida Windows Store](tutorial/guida-windows-store.md)
* [Packaging Applicazione](tutorial/packaging-applicazione.md)
* [Usare Moduli Node Nativi](tutorial/usare-moduli-node-nativi.md)
* [Debugging Processo Principale](tutorial/debugging-processo-principale.md)
* [Usare Selenium e WebDriver](tutorial/usare-selenium-e-webdriver.md)
* [Estensioni DevTools](tutorial/estensioni-devtools.md)
* [Usare Plugin Pepper Flash](tutorial/usare-plugin-pepper-flash.md)
* [Usare Plugin Widevine CDM](tutorial/usare-plugin-widevine-cdm.md)
* [Testare su Sistemi Headless CI (Travis, Jenkins)](tutorial/testare-su-sistemi-headless-ci.md)
* [Rendering Offscreen](tutorial/rendering-offscreen.md)
## Tutorial
* [Guida Rapida](tutorial/guida-rapida.md)
* [Integrazione Ambiente Desktop](tutorial/integrazione-ambiente-desktop.md)
* [Rilevazione Eventi Online/Offline](tutorial/eventi-online-offline.md)
## Documentazione API
* [Sinossi](api/sinossi.md)
* [Oggetto Process](api/process.md)
* [Parametri Linea di Comando Chrome Supportati](api/parametri-linea-comando-chrome.md)
* [Variabili di Ambiente](api/variabili-ambiente.md)
### Elementi personalizzati DOM:
* [Oggetto `File`](api/oggetto-file.md)
* [Tag `<webview>`](api/webview-tag.md)
* [Funzione `window.open`](api/window-open.md)
### Moduli per il Processo Main:
* [app](api/app.md)
* [autoUpdater](api/auto-updater.md)
* [BrowserWindow](api/browser-window.md)
* [contentTracing](api/content-tracing.md)
* [dialog](api/dialog.md)
* [globalShortcut](api/global-shortcut.md)
* [ipcMain](api/ipc-main.md)
* [Menu](api/menu.md)
* [MenuItem](api/menu-item.md)
* [powerMonitor](api/power-monitor.md)
* [powerSaveBlocker](api/power-save-blocker.md)
* [protocol](api/protocol.md)
* [session](api/session.md)
* [systemPreferences](api/system-preferences.md)
* [Tray](api/tray.md)
* [webContents](api/web-contents.md)
### Moduli per il Processo di Rendering (Pagina Web):
* [desktopCapturer](api/desktop-capturer.md)
* [ipcRenderer](api/ipc-renderer.md)
* [remote](api/remote.md)
* [webFrame](api/web-frame.md)
### Moduli per Entrambi i Processi:
* [clipboard](api/clipboard.md)
* [crashReporter](api/crash-reporter.md)
* [nativeImage](api/native-image.md)
* [screen](api/screen.md)
* [shell](api/shell.md)
## Sviluppo
* [Stile Codice](development/stile-codice.md)
* [Struttura Cartella Codice Sorgente](development/struttura-cartella-codice-sorgente.md)
* [Differenze Tecniche da NW.js (precedentemente node-webkit)](development/atom-shell-vs-node-webkit.md)
* [Panoramica Sistema di Build](development/panoramica-sistema-build.md)
* [Istruzioni Build (macOS)](development/istruzioni-build-macos.md)
* [Istruzioni Build (Windows)](development/istruzioni-build-windows.md)
* [Istruzioni Build (Linux)](development/istruzioni-build-linux.md)
* [Istruzioni Debug (macOS)](development/istruzioni-debug-macos.md)
* [Istruzioni Debug (Windows)](development/istruzioni-debug-windows.md)
* [Impostare Symbol Server nel debugger](development/impostare-symbol-server.md)

View file

@ -1,167 +0,0 @@
# Electron FAQ
## Quando verrà utilizzata l'ultima versione di Chrome per Electron?
La versione di Chrome usata da Electron viene aggiornata solitamente entro una o
due settimane dal rilascio di una versione stabile di Chrome. Questa stima non è
garantita e dipende dall'ammontare di lavoro necessario all'aggiornamento.
E' utilizzato solo il canale stabile di Chrome. Se un fix importante si trovasse
sui canali beta o dev, lo applicheremo a una versione precedente.
Per maggiori informazioni, leggi l'[introduzione alla sicurezza](tutorial/sicurezza.md).
## Quando verrà utilizzata l'ultima versione di Node.js per Electron?
Quando una nuova versione di Node.js viene rilasciata, aspettiamo per circa un
mese prima di aggiornare quella di Electron. Possiamo così evitare di essere
influenzati dai bug introdotti nelle nuove versioni di Node.js, cosa che accade
spesso.
Le nuove funzionalità di Node.js sono solitamente introdotte dagli aggiornamenti
di V8. Siccome Electron usa la versione di V8 integrata nel browser Chrome, le
nuove funzionalità di JavaScript implementate nella nuova versione di Node.js
sono già presenti in Electron.
## Come condividere dati tra pagine web?
Il modo più semplice per condividere dati tra pagine web (il processo di
rendering) è usare le API di HTML5 già disponibili nei browser. Alcune buone
opzioni sono [Storage API][storage], [`localStorage`][local-storage],
[`sessionStorage`][session-storage] e [IndexDB][indexed-db].
Oppure puoi usare il sistema IPC, che è specifico di Electron, per memorizzare
gli oggetti nel processo principale come variabile globale e accedervi poi
dai renderer tramite la proprietà `remote` del modulo `electron`:
```javascript
// Nel processo principale.
global.sharedObject = {
someProperty: 'valore di default'
}
```
```javascript
// Nella pagina 1.
require('electron').remote.getGlobal('sharedObject').someProperty = 'nuovo valore'
```
```javascript
// Nella pagina 2.
console.log(require('electron').remote.getGlobal('sharedObject').someProperty)
```
## La finestra/icona della mia app è sparita dopo qualche minuto.
Ciò accade quando una variabile usata per la memorizzazione della finestra/
icona viene garbage-collected.
Se dovessi incontrare questo problema, i seguenti articoli potrebbero esserti
d'aiuto:
* [Gestione Memoria][memory-management]
* [Visibilità Variabili][variable-scope]
Se hai bisogno di un fix veloce, puoi rendere le variabili globali cambiando il
tuo codice da così:
```javascript
const {app, Tray} = require('electron')
app.on('ready', () => {
const tray = new Tray('/percorso/icona.png')
tray.setTitle('ciao mondo')
})
```
a così:
```javascript
const {app, Tray} = require('electron')
let tray = null
app.on('ready', () => {
tray = new Tray('/percorso/icona.png')
tray.setTitle('ciao mondo')
})
```
## Non posso usare jQuery/RequireJS/Meteor/AngularJS in Electron.
Data l'integrazione di Node.js di Electron, vi sono alcuni simboli extra
inseriti nel DOM quali `module`, `exports`, `require`. Ciò causa problemi ad
alcune librerie in quanto vogliono inserire simboli con gli stessi nomi.
Per risolvere il problema, puoi disattivare l'integrazione di Node in Electron:
```javascript
// Nel processo principale.
const {BrowserWindow} = require('electron')
let win = new BrowserWindow({
webPreferences: {
nodeIntegration: false
}
})
win.show()
```
Se invece volessi mantenere la capacità di usare Node.js e le API di Electron,
devi rinominare i simboli nella pagina prima di includere altre librerie:
```html
<head>
<script>
window.nodeRequire = require;
delete window.require;
delete window.exports;
delete window.module;
</script>
<script type="text/javascript" src="jquery.js"></script>
</head>
```
## `require('electron').xxx` is undefined.
Mentre usi il modulo integrato di Electron potresti incorrere in un errore
come questo:
```
> require('electron').webFrame.setZoomFactor(1.0)
Uncaught TypeError: Cannot read property 'setZoomLevel' of undefined
```
Ciò è causato dal fatto che hai il [modulo npm `electron`][electron-module]
installato localmente o globalmente, e ciò sovrascrive il modulo integrato di
Electron.
Per verificare che tu stia usando il modulo integrato corretto, puoi stampare a
schermo il percorso del modulo `electron`:
```javascript
console.log(require.resolve('electron'))
```
e dopodiché controlla che sia in questa forma
```
"/percorso/Electron.app/Contents/Resources/atom.asar/renderer/api/lib/exports/electron.js"
```
Se dovesse essere simile a `node_modules/electron/index.js`, allora devi
rimuovere il modulo npm `electron` oppure rinominarlo.
```bash
npm uninstall electron
npm uninstall -g electron
```
Tuttavia, se usi il modulo integrato e continui a ricevere questo errore è molto
probabile che tu stia usando il modulo in un processo sbagliato. Per esempio
`electron.app` può essere usato solo nel processo principale, mentre
`electron.webFrame` è disponibile solo nel processo di rendering.
[memory-management]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management
[variable-scope]: https://msdn.microsoft.com/library/bzt2dkta(v=vs.94).aspx
[electron-module]: https://www.npmjs.com/package/electron
[storage]: https://developer.mozilla.org/en-US/docs/Web/API/Storage
[local-storage]: https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage
[session-storage]: https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage
[indexed-db]: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API

View file

@ -1,246 +0,0 @@
# Guida allo Stile della Documentazione
Queste sono le linee guida per la stesura della documentazione di Electron.
## Titoli
* Ogni pagina deve avere un singolo titolo di livello `#` all'inizio.
* I capitoli di una stessa pagina devono avere titoli di livello `##`.
* I sotto-capitoli devono avere un numero crescente di `#` a seconda del loro
livello di annidamento.
* Tutte le parole nel titolo della pagina devono iniziare con la lettera
maiuscola, a eccezione delle congiunzioni come "di" ed "e".
* Solo la prima lettera della prima parola di un capitolo deve essere maiuscola.
Prendendo `Guida Rapida` come esempio:
```markdown
# Guida Rapida
...
## Processo principale
...
## Processo di rendering
...
## Esegui la tua app
...
### Crea una distribuzione
...
### Electron scaricato manualmente
...
```
Esistono eccezioni a queste regole per quanto riguarda la documentazione delle
API.
## Regole markdown
* Usa `bash` invece di `cmd` nei blocchi di codice (per via della diversa
evidenziazione della sintassi).
* Le linee devono essere lunghe al massimo 80 caratteri.
* Non annidare le liste per pi<70> di due livelli (per via del rendering compiuto
da markdown).
* Tutti i blocchi di codice `js` o `javascript` sono analizzati con
[standard-markdown](http://npm.im/standard-markdown).
## Documentazione API
Le regole seguenti vengono applicate solo alla documentazione delle API.
### Titolo della pagina
Ogni pagina deve avere come titolo il nome dell'oggetto a cui si riferisce
seguito da `require('electron')`, come ad esempio `BrowserWindow`, `autoUpdater`
e `session`.
Sotto il titolo della pagina deve esserci una descrizione della lunghezza di una
linea che comincia con `>`.
Prendendo `session` come esempio:
```markdown
# session
> Gestisce le sessioni browser, cookies, cache, impostazioni proxy, etc.
```
### Metodi ed eventi dei moduli
Per i moduli che non sono classi, i loro metodi ed eventi devono essere elencati
sotto i capitoli `## Metodi` ed `## Eventi`.
Prendendo `autoUpdate` come esempio:
```markdown
# autoUpdater
## Eventi
### Evento: 'error'
## Metodi
### `autoUpdater.setFeedURL(url[, requestHeaders])`
```
### Classi
* Le classi API e le classi che sono parte di moduli devono essere elencate
sotto un capitolo `## Classe: NomeDellaClasse`.
* Una pagina pu<70> avere pi<70> classi.
* I costruttoi devono essere elencati con un titolo di livello `###`.
* I [Metodi Statici](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/static) (Inglese) devono essere elencati sotto un capitolo
`### Metodi Statici`.
* I [Metodi di Istanza](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes#Prototype_methods) (Inglese) devono essere elencati sotto un
capitolo `### Metodi di Istanza`.
* Gli Eventi di Istanza devono essere elencati sotto un capitolo
`## Eventi di Istanza`.
* Le Propriet<65> di Istanza devono essere elencate sotto un capitolo `## Propriet<65> di Istanza`.
Prendendo le classi `Session` e `Cookies` come esempi:
```markdown
# session
## Metodi
### session.fromPartition(partition)
## Propriet<65>
### session.defaultSession
## Classe: Session
### Eventi di Istanza
#### Evento: 'will-download'
### Metodi di Istanza
#### `ses.getCacheSize(callback)`
### Propriet<65> di Istanza
#### `ses.cookies`
## Classe: Cookies
### Metodi di Istanza
#### `cookies.get(filter, callback)`
```
### Metodi
Il capitolo dei metodi deve seguire il seguente formato:
```markdown
### `objectName.methodName(required[, optional]))`
* `required` String
* `optional` Integer (optional)
...
```
Il titolo pu<70> essere di livello `###` o `####` a seconda che sia un metodo di
un modulo o di una classe.
Per i moduli, il `nomeOggetto` <20> il nome del modulo. Per le classi, deve essere
il nome dell'istanza della classe e non deve essere lo stesso del modulo.
Per esempio, i metodi della classe `Session` sotto il modulo `session` devono
usare `ses` come `nomeOggetto`.
I parametri opzionali sono caratterizzati sia dalle parentesi quadre `[]` che
circondano il parametro, sia dalla virgola obbligatoria in caso il parametro
ne segua un altro.
```
required[, optional]
```
Sotto ogni metodo si trovano informazioni dettagliate su ogni parametro. Il tipo
di parametro <20> caratterizzato da uno dei tipi di dati comuni:
* [`String`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)
* [`Number`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)
* [`Object`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)
* [`Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)
* [`Boolean`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)
* O da un tipo di dati personalizzato come [`WebContent`](api/web-content.md) di
Electron
Se un parametro o un metodo sono limitati a certe piattaforme, esse sono
segnalate, dopo il tipo di dato, attraverso l'uso di una lista di elementi in
corsivo e delimitati da uno spazio. I valori possono essere `macOS`,
`Windows` e `Linux`.
```markdown
* `animate` Boolean (optional) _macOS_ _Windows_
```
I parametri di tipo `Array` devono specificare nella descrizione sottostante
che elementi pu<70> contenere l'array.
La descrizione per i parametri di tipo `Funzione` dovrebbero rendere chiaro come
sia possibile chiamarli, ed elencare i tipi di parametri che vi saranno passati.
### Eventi
Il capitolo degli eventi deve seguire il seguente formato:
```markdown
### Evento: 'wake-up'
Ritorna:
* `time` String
...
```
Il titolo pu<70> essere di livello `###` o `####` a seconda che sia di un evento di
un modulo o di una classe.
I parametri di un evento seguono le stesse regole di quelli dei metodi.
### Propriet<65>
Il capitolo delle propriet<65> deve seguire il seguente formato:
```markdown
### session.defaultSession
...
```
Il titolo pu<70> essere di livello `###` o `####` a seconda che sia una propriet<65>
di un metodo o di una classe.
## Traduzioni della Documentazione
Le traduzioni della documentazione di Electron si trovano nella cartella
`docs-translations`.
Per aggiungere un altro set (o set parziale):
* Crea una sottocartella che abbia come nome il codice della lingua.
* Traduci i file.
* Aggiorna il file README.md dentro la cartella della lingua in modo che
reindirizzi ai file che hai tradotto.
* Aggiungi un collegamento alla cartella della traduzione nel [README](https://github.com/electron/electron#documentation-translations) principale di Electron.
Nota che tutti i file nella cartella `docs-translations` devono includere solo
i file tradotti. I file originali in inglese non devono essere copiati l<>.

View file

@ -1,97 +0,0 @@
使用している Electron のバージョンに応じたドキュメントを使うように確認してください。
ドキュメントのバージョン番号はページの URL の一部になっています。
そうでない場合、おそらくご使用の Electron のバージョンと互換性のない API 変更を含んだ development ブランチのドキュメントを使っているものと思われます。
その場合、atom.io の [available versions](https://electron.atom.io/docs/) リストにある別のバージョンのドキュメントに切り替えることができます。また GitHub で閲覧している場合、"Switch branches/tags" ドロップダウンを開いて、バージョンに対応したタグを選ぶこともできます。
_リンクになっていないリストは未翻訳のものです。_
## FAQ
頻繁に聞かれる質問がありますので、issueを作成する前にこれをチェックしてください。
* [Electron FAQ](faq/electron-faq.md)
## ガイド
* [サポートするプラットフォーム](tutorial/supported-platforms.md)
* [セキュリティ](tutorial/security.md)
* [Electronのバージョン管理](tutorial/electron-versioning.md)
* [アプリケーションの配布](tutorial/application-distribution.md)
* [Mac App Store 提出ガイド](tutorial/mac-app-store-submission-guide.md)
* Windows Store Guide (tutorial/windows-store-guide.md)
* [アプリケーションのパッケージ化](tutorial/application-packaging.md)
* [ネイティブのNodeモジュールを使用する](tutorial/using-native-node-modules.md)
* [メインプロセスのデバッグ](tutorial/debugging-main-process.md)
* [Selenium と WebDriverを使用する](tutorial/using-selenium-and-webdriver.md)
* [DevTools エクステンション](tutorial/devtools-extension.md)
* [Pepper Flashプラグインを使用する](tutorial/using-pepper-flash-plugin.md)
* [Widevine CDMプラグインを使用する](tutorial/using-widevine-cdm-plugin.md)
* [継続的インテグレーションシステムによるテスト(Travis, Jenkins)](tutorial/testing-on-headless-ci.md)
* [キーボードショートカット](tutorial/keyboard-shortcuts.md)
# チュートリアル
* [クイックスタート](tutorial/quick-start.md)
* [デスクトップ環境の統合](tutorial/desktop-environment-integration.md)
* [オンライン/オフライン イベントの検知](tutorial/online-offline-events.md)
## API リファレンス
* [概要](api/synopsis.md)
* [Process Object](api/process.md)
* [サポートしているChromeコマンドラインスイッチ](api/chrome-command-line-switches.md)
* [環境変数](api/environment-variables.md)
### カスタムDOM要素:
* [`File` Object](api/file-object.md)
* [`<webview>` タグ](api/webview-tag.md)
* [`window.open` 関数](api/window-open.md)
### Main Processのモジュール:
* [app](api/app.md)
* [autoUpdater](api/auto-updater.md)
* BrowserWindow (api/browser-window.md)
* [フレームの無いウィンドウ](api/frameless-window.md)
* [contentTracing](api/content-tracing.md)
* [dialog](api/dialog.md)
* [globalShortcut](api/global-shortcut.md)
* [ipcMain](api/ipc-main.md)
* [Menu](api/menu.md)
* [MenuItem](api/menu-item.md)
* [powerMonitor](api/power-monitor.md)
* [powerSaveBlocker](api/power-save-blocker.md)
* [protocol](api/protocol.md)
* [session](api/session.md)
* [systemPreferences](api/system-preferences.md)
* [Tray](api/tray.md)
* webContents (api/web-contents.md)
### Renderer Processのモジュール (Web Page):
* [desktopCapturer](api/desktop-capturer.md)
* [ipcRenderer](api/ipc-renderer.md)
* [remote](api/remote.md)
* [webFrame](api/web-frame.md)
### 両方のProcessのモジュール :
* [clipboard](api/clipboard.md)
* [crashReporter](api/crash-reporter.md)
* [nativeImage](api/native-image.md)
* [screen](api/screen.md)
* [shell](api/shell.md)
## 開発
* [コーディング規約](development/coding-style.md)
* Source Code Directory Structure (development/source-code-directory-structure.md)
* [NW.js(node-webkit) との技術的違い](development/atom-shell-vs-node-webkit.md)
* Build System Overview (development/build-system-overview.md)
* [ビルド方法(macOS)](development/build-instructions-osx.md)
* Build Instructions (Windows) (development/build-instructions-windows.md)
* [ビルド方法(Linux)](development/build-instructions-linux.md)
* Debug Instructions (Windows) (development/debug-instructions-windows.md)
* Setting Up Symbol Server in debugger (development/setting-up-symbol-server.md)

View file

@ -1,43 +0,0 @@
# Accelerator
acceleratorは、キーボードショートカットを示す文字列です。複数の修飾語句とキーコードを `+` 文字で結合します。
例:
* `Command+A`
* `Ctrl+Shift+Z`
## プラットフォームの留意点
macOSでは`Command` キー、LinuxとWindowsでは`Control` キーを意味する`CommandOrControl`はいくつかのacceleratorを定義しますが、LinuxとWindowsでは、`Command` キーは何の効果もありません。
`Super` キーは、WindowsとLinuxでは `Windows` キーに、macOSでは、`Cmd` キーに関連付けられます。
## 提供されている修飾語句
* `Command` (または、短く `Cmd`)
* `Control` (または、短く `Ctrl`)
* `CommandOrControl` (または、短く `CmdOrCtrl`)
* `Alt`
* `Shift`
* `Super`
## 提供されているキーコード
* `0` to `9`
* `A` to `Z`
* `F1` to `F24`
* `~`, `!`, `@`, `#`, `$`などの記号
* `Plus`
* `Space`
* `Backspace`
* `Delete`
* `Insert`
* `Return` (またはエイリアスで `Enter`)
* `Up``Down`,`Left`、 `Right`
* `Home``End`
* `PageUp``PageDown`
* `Escape` (または、短く `Esc`)
* `VolumeUp``VolumeDown``VolumeMute`
* `MediaNextTrack``MediaPreviousTrack``MediaStop``MediaPlayPause`

View file

@ -1,442 +0,0 @@
# app
`app` モジュールは、アプリケーションのライフサイクルコントロールを担います。
次の例は、最後のウィンドウが閉じたときにアプリケーションを終了させる方法を示しています。
```javascript
const app = require('electron').app
app.on('window-all-closed', function () {
app.quit()
})
```
## イベント
`app` オブジェクトは次のイベントを出力します。
### イベント: 'will-finish-launching'
アプリケーションの基礎起動が終わったときに出力されます。Windows と Linuxでは、 `will-finish-launching` イベントと`ready`イベントは同じです。macOSでは、`NSApplication`の `applicationWillFinishLaunching` 通知をに相当します。通常、`open-file`と`open-url` 用のリスナーの設定、クラッシュレポートの開始、自動アップデートをします。
ほとんどの場合、 `ready` イベントハンドラーですべてをするべきです。
### イベント: 'ready'
Electronの初期化が終わった時に出力します。
### イベント: 'window-all-closed'
全てのウィンドウを閉じたときに出力します。
このイベントは、アプリケーションが終了する予定ではないときのみ出力します。ユーザーが `Cmd + Q`を押したり、開発者が`app.quit()`をコールすると、Electronは最初にすべてのウィンドウをクローズしようとし、`will-quit`イベントを出力します。この場合、`window-all-closed`イベントは出力されません。
### イベント: 'before-quit'
戻り値:
* `event` Event
アプリケーションがウィンドウをクローズし始める前に出力します。`event.preventDefault()`をコールすると、アプリケーションを終了させる既定の挙動を止めることができます。
### イベント: 'will-quit'
戻り値:
* `event` Event
全てのウィンドウが閉じて、アプリケーションを終了するときに出力します。`event.preventDefault()`をコールすると、アプリケーションを終了させる既定の挙動を止めることができます。
詳細は、`will-quit`イベント と `window-all-closed` イベントの違いは、`window-all-closed` イベントの説明を見てください。
### イベント: 'quit'
戻り値:
* `event` Event
* `exitCode` Integer
アプリケーションが終了したときに出力されます。
### イベント: 'open-file' _macOS_
戻り値:
* `event` Event
* `path` String
アプリケーションでファイルを開こうとしたときに出力します。アプリケーションがすでに起動し、OSがファイルを開くアプリケーションを再使用したいとき、`open-file`イベントは出力します。ファイルがdockにドロップアウトされ、アプリケーションがまだ起動していないときにも`open-file` は出力します。このケースを処理するために、アプリケーションの起動のかなり早い段階で、`open-file` イベントをリッスンして確認します(まだ `ready` イベントが出力する前に)。
このイベントをハンドルしたいときには `event.preventDefault()` をコールすべきです。
Windowsでは、ファイルパスを取得するために、 `process.argv` をパースする必要があります。
### イベント: 'open-url' _macOS_
戻り値:
* `event` Event
* `url` String
アプリケーションでURLを開こうとしたときに出力されます。URLスキーマーは、アプリケーションが開くように登録しなければなりません。
このイベントをハンドルしたい場合は、`event.preventDefault()`をコールすべきです。
### イベント: 'activate' _macOS_
戻り値:
* `event` Event
* `hasVisibleWindows` Boolean
アプリケーションがアクティブになったときに出力されます。通常は、アプリケーションのドックアイコンをクリックしたときに発生します。
### イベント: 'browser-window-blur'
戻り値:
* `event` Event
* `window` BrowserWindow
[browserWindow](browser-window.md) からフォーカスが外れたときに出力されます。
### イベント: 'browser-window-focus'
戻り値:
* `event` Event
* `window` BrowserWindow
[browserWindow](browser-window.md) にフォーカスが当たったとき出力されます。
### イベント: 'browser-window-created'
戻り値:
* `event` Event
* `window` BrowserWindow
新しい [browserWindow](browser-window.md) が作成されたときに出力されます。
### イベント: 'certificate-error'
戻り値:
* `event` Event
* `webContents` [WebContents](web-contents.md)
* `url` URL
* `error` String - The error code
* `certificate` Object
* `data` Buffer - PEM encoded data
* `issuerName` String
* `callback` Function
`url``certificate` 検証に失敗したときに発生します。証明書を信頼するために`event.preventDefault()` と `callback(true)`をコールして既定の動作を止める必要があります。
```javascript
app.on('certificate-error', (event, webContents, url, error, certificate, callback) => {
if (url === 'https://github.com') {
// Verification logic.
event.preventDefault()
callback(true)
} else {
callback(false)
}
})
```
### イベント: 'select-client-certificate'
戻り値:
* `event` Event
* `webContents` [WebContents](web-contents.md)
* `url` URL
* `certificateList` [Objects]
* `data` Buffer - PEM encoded data
* `issuerName` String - Issuer's Common Name
* `callback` Function
クライアント証明書が要求されたときに出力されます。
`url` は、クライアント証明書を要求するナビゲーションエントリーに対応し、`callback` リストからエントリをフィルターしてコールするのに必要です。`event.preventDefault()` を使用して、アプリケーションの証明書ストアから最初の証明書を使用するのを止めることができます。
```javascript
app.on('select-client-certificate', function (event, webContents, url, list, callback) {
event.preventDefault()
callback(list[0])
})
```
### イベント: 'login'
Returns:
* `event` Event
* `webContents` [WebContents](web-contents.md)
* `request` Object
* `method` String
* `url` URL
* `referrer` URL
* `authInfo` Object
* `isProxy` Boolean
* `scheme` String
* `host` String
* `port` Integer
* `realm` String
* `callback` Function
`webContents` がベーシック認証をしようとしたときに出力されます。
既定の動作ではすべての認証をキャンセルしたり、`event.preventDefault()` と `callback(username, password)` とを証明書でコールし既定の動作をとめてオーバーライドします。
```javascript
app.on('login', function (event, webContents, request, authInfo, callback) {
event.preventDefault()
callback('username', 'secret')
})
```
### イベント: 'gpu-process-crashed'
gpu プロセスがクラッシュしたときに出力されます。
## メソッド
`app` オブジェクトは次のメソッドを持ちます。
**Note:** いくつかのメソッドは、特定のオペレーティングシステム向けに提供され、そのようにラベルで表示します。
### `app.quit()`
全てのウィンドウを閉じようとします。`before-quit`イベントは、最初に出力されます。すべてのウィンドウを閉じることに成功したら、`will-quit`イベントが出力され、既定では、アプリケーションが終了します。
このメソッドは、全ての`beforeunload`と`unload`イベントハンドラは正確に発生することを保証されます。`beforeunload` イベントハンドラで、`false`を返すことでウィンドウの終了をキャンセルすることができます。
### `app.exit(exitCode)`
* `exitCode` Integer
`exitCode`で今すぐ終了します。
全てのウィンドウは、ユーザーに確認することなく、すぐに閉じ、`before-quit`と`will-quit` イベントは出力されません。
### `app.getAppPath()`
減殺のアプリケーションディレクトリを戻します。
### `app.getPath(name)`
* `name` String
`name`に関連した特定のディレクトリやファイルへのパスを返します。失敗したら、`Error`をスローします。
`name`で次のパスをリクエストできます。
* `home` ユーザーのホームディレクトリ
* `appData` 既定で示すユーザーごとのアプリケーションディレクトリ
* `%APPDATA%` Windows上
* `$XDG_CONFIG_HOME` or `~/.config` Linux上
* `~/Library/Application Support` macOS上
* `userData` アプリの設定ファイルを格納するディレクトリで、既定では`appData` ディレクトリ配下のアプリ名ディレクトリです
* `temp` 一時ディレクトリ
* `exe` 現在の実行ファイル
* `module` `libchromiumcontent` ライブラリ
* `desktop` 現在のユーザーのデスクトップディレクトリ
* `documents` ユーザーの "My Documents"用ディレクトリ
* `downloads` ユーザーのダウンロード用ディレクトリ
* `music` ユーザーのミュージック用ディレクトリ
* `pictures` ユーザーのピクチャー用ディレクトリ
* `videos` ユーザーのビデオ用ディレクトリ
### `app.setPath(name, path)`
* `name` String
* `path` String
`name`に関連した特定のディレクトリやファイルへの`path` を上書きします。存在しないパスを指定した場合、このメソッドがディレクトリを作成します。失敗したら、`Error`をスローします。
`app.getPath`で、`name` で定義されたパスを上書きできます。
既定では、webページのクッキーとキャッシュは`userData`ディレクトリ配下に格納できます。ロケーションを変更したい場合、 `app` モジュールの `ready` イベントが出力される前に`userData`パスを上書きする必要があります。
### `app.getVersion()`
ロードしたアプリケーションのバージョンを戻します。アプリケーションの `package.json`ファイルにversionが無ければ、現在のバンドルまたは実行ファイルのバージョンになります。
### `app.getName()`
現在のアプリケーション名を戻し、`package.json` ファイルのnameです。
通常、 `package.json`の`name` フィールドは、短い小文字名で、npm module spec と一致します。通常、`productName`で、アプリケーションの大文字正式名を指定し、Electronでは`name`をそれで上書きます。
### `app.getLocale()`
現在のアプリケーションのロケールを戻します。
### `app.addRecentDocument(path)` _macOS_ _Windows_
* `path` String
最近のドキュメント一覧に`path`を追加します。
この一覧はOSが管理しています。Windowsではタスクバーからこの一覧を見れ、macOSではdockメニューから見れます。
### `app.clearRecentDocuments()` _macOS_ _Windows_
最近のドキュメント一覧をクリアします。
### `app.setUserTasks(tasks)` _Windows_
* `tasks` Array - `Task` オブジェクトの配列
Windowsのジャンプリストの[Tasks][tasks]カテゴリに`tasks`を追加します。
`tasks` は`Task`オブジェクトの配列で、次のフォーマットになります。
`Task` Object:
* `program` String - 実行するプログラムのパスで、通常はプログラムが開く`process.execPath`を指定します
* `arguments` String - `program` を実行するときのコマンドライン引数です
* `title` String - ジャンプリストに表示される文字列です
* `description` String - タスクの説明
* `iconPath` String - ジャンプリストに表示するアイコンの絶対パスで、アイコンを含む任意のリソースファイルです。通常、プログラムのアイコンを表示する`process.execPath`を指定します。
* `iconIndex` Integer - アイコンファイルのアイコンインデックスです。アイコンファイルに2つ以上のアイコンが含まれている場合、この値でアイコンを指定します。1つしかアイコンファイルに含まれていない場合は、この値は0です。
### `app.allowNTLMCredentialsForAllDomains(allow)`
* `allow` Boolean
HTTP NTLMまたはNegotiate認証用の照明を常に送信するかどうかを動的に設定できます。通常、Electronはローカルインターネットサイト例えば、あなたと同じドメイン名のときに該当するURL用のNTLM/Kerberos証明書のみ送信します。しかし、この検知はコーポレートネットワークの設定が悪いときには、頻繁に失敗するので、この挙動を共通に行うことを選べば、全てのURLで有効にできます。
### `app.makeSingleInstance(callback)`
* `callback` Function
このメソッドは、アプリケーションをシングルインスタンスアプリケーションにします。アプリの実行を複数のインスタンスで実行することを許可せず、アプリケーション実行をシングルインスタンスのみにすることを保証し、ほかのインスタンスにはこのインスタンスの存在を知らせ終了さえます。
2つ目のインスタンスが起動したとき、`callback` は、`callback(argv, workingDirectory)` でコールします。`argv` は、2つ目のインスタンスのコマンドライン引数の配列で、`workingDirectory` は現在のワーキングディレクトリです。通常、アプリケーションはメインのウィンドウにフォーカスをあて最小化させないことで対応します。
The `callback` は、 `app`の`ready` イベントの出力後に実行することを保証します。
プロセスがアプリケーションのプライマリインスタンスでアプリがロードし続けるなら、このメソッドは `false`を戻します。プロセスがほかのインスタンスにパラメーターを送信し、`true`を戻すと、直ちに終了します。
macOSは、ユーザーがFinderで2つ目のアプリインスタンスを開いたり、`open-file` 、 `open-url`イベントが出力しようとすると、システムが自動的にシングルインスタンスを強制します。しかし、コマンドラインでアプリを開始するとシステムのシングルインスタンスメカニズムは無視されるので、シングルインスタンスを強制するためには、このメソッドを使う必要があります。
2つ目のインスタンスを起動するとき、メインのインスタンスのウィンドウをアクティブにする例
```javascript
var myWindow = null
var shouldQuit = app.makeSingleInstance(function (commandLine, workingDirectory) {
// Someone tried to run a second instance, we should focus our window
if (myWindow) {
if (myWindow.isMinimized()) myWindow.restore()
myWindow.focus()
}
return true
})
if (shouldQuit) {
app.quit()
}
app.on('ready', function () {
// Create myWindow, load the rest of the app, etc...
})
```
### `app.setAppUserModelId(id)` _Windows_
* `id` String
[Application User Model ID][app-user-model-id] を `id`に変更します。
### `app.isAeroGlassEnabled()` _Windows_
[DWM composition](https://msdn.microsoft.com/en-us/library/windows/desktop/aa969540.aspx)(Aero Glass) が有効なら、このメソッドは`true`を戻し、有効でなければ`false`を戻します。透明なウィンドウを作成する必要があるか、またはできないときDWM compositionが無効なとき用明なウィンドウは正しく動作しません、このAPIを使うことができます。
使用例:
```javascript
let browserOptions = {width: 1000, height: 800}
// Make the window transparent only if the platform supports it.
if (process.platform !== 'win32' || app.isAeroGlassEnabled()) {
browserOptions.transparent = true
browserOptions.frame = false
}
// Create the window.
win = new BrowserWindow(browserOptions)
// Navigate.
if (browserOptions.transparent) {
win.loadURL(`file://${__dirname}/index.html`)
} else {
// No transparency, so we load a fallback that uses basic styles.
win.loadURL(`file://${__dirname}/fallback.html`)
}
```
### `app.commandLine.appendSwitch(switch[, value])`
Chromiumのコマンドラインにスイッチ `value`をオプションにし)を追加します。
**Note:** これは、`process.argv`に影響せず、開発者が、Chromiumのローレベルな挙動をコントロールするのに使用します。
### `app.commandLine.appendArgument(value)`
Chromiumのコマンドダインに引数を追加します。引数は正しく引用符で囲まれます。
**Note:** `process.argv`に影響しません。
### `app.dock.bounce([type])` _macOS_
* `type` String (optional) - `critical` または `informational`を指定できます。既定では、 `informational`です。
`critical`を渡すと、アプリケーションがアクティブ、もしくはリクエストがキャンセルされるまでは、dockアイコンは、バウンスします。
`informational` を渡すと、1秒dockアイコンはバウンスします。しかし、アプリケーションがアクティブ、もしくはリクエストがキャンセルされるまでは、リクエストは残ります。
リクエストを示すIDを戻します。
### `app.dock.cancelBounce(id)` _macOS_
* `id` Integer
`id`のバウンスをキャンセルします。
### `app.dock.setBadge(text)` _macOS_
* `text` String
dockのバッジエリアで表示する文字列を設定します。
### `app.dock.getBadge()` _macOS_
dockのバッジ文字列を戻します。
### `app.dock.hide()` _macOS_
dock アイコンを隠します。
### `app.dock.show()` _macOS_
dock アイコンを表示します。
### `app.dock.setMenu(menu)` _macOS_
* `menu` Menu
アプリケーションの[dock menu][dock-menu]を設定します。
### `app.dock.setIcon(image)` _macOS_
* `image` [NativeImage](native-image.md)
dock アイコンに紐づいた`image`を設定します。
[dock-menu]:https://developer.apple.com/library/mac/documentation/Carbon/Conceptual/customizing_docktile/concepts/dockconcepts.html#//apple_ref/doc/uid/TP30000986-CH2-TPXREF103
[tasks]:http://msdn.microsoft.com/en-us/library/windows/desktop/dd378460(v=vs.85).aspx#tasks
[app-user-model-id]: https://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx

View file

@ -1,85 +0,0 @@
# autoUpdater
このモジュールは、`Squirrel`オートアップデートフレームワークのインターフェイスを提供します。
## プラットフォーム留意点
`autoUpdater`は、異なるプラットフォーム用に統一したAPIを提供していますが、それぞれのプラットフォーム上で、まだ多少の差があります。
### macOS
macOSでは、 `autoUpdater` モジュールは、[Squirrel.Mac][squirrel-mac]上に構築されていて、動作させるのに特別な設定が不要であることを意味します。サーバーサイドの要件は、[Server Support][server-support]を読んでください。
### Windows
Windowsでは、auto-updaterを使う前に、ユーザーのPCにアプリをインストールする必要があるので、Windows インストーラーを生成するために[grunt-electron-installer][installer]モジュールを使用することをお勧めします。
Squirrelで生成されたインストーラーは、`com.squirrel.PACKAGE_ID.YOUR_EXE_WITHOUT_DOT_EXE`のフォーマット(例えば、`com.squirrel.slack.Slack` と `com.squirrel.code.Code`)で[Application User Model ID][app-user-model-id]とショートカットアイコンを作成します。`app.setAppUserModelId`APIで同じIDを使う必要があります。同じIDでないと、Windowsはタスクバーに適切にピン止めすることができません。
サーバーサイドのセットアップは、macOSと異なります。詳細は、[Squirrel.Windows][squirrel-windows] を参照してください。
### Linux
Linuxでは、auot-updater用のサポートがビルトインされていないので、アプリをアップデートするためにディストリビューションのパッケージマネジャーを使用することをお勧めします。
## イベント
`autoUpdater` オブジェクトは次のイベントを出力します。
### イベント: 'error'
戻り値:
* `error` Error
アップデート中にエラーがあった場合に出力されます。
### イベント: 'checking-for-update'
アップデートを開始したかチェックしたときに出力されます。
### イベント: 'update-available'
アップデートが提供されているときに出力されます。アップデートは自動的にダウンロードされます。
### イベント: 'update-not-available'
アップデートが提供されていないときに出力されます。
### イベント: 'update-downloaded'
戻り値:
* `event` Event
* `releaseNotes` String
* `releaseName` String
* `releaseDate` Date
* `updateURL` String
アップデートをダウンロードしたときに出力されます。
Windowsでは、`releaseName` のみ提供されます。
## メソッド
`autoUpdater` オブジェクトは次のメソッドを持っています。
### `autoUpdater.setFeedURL(url)`
* `url` String
`url`を設定し、自動アップデートを初期化します。 `url`は一度設定すると変更できません。
### `autoUpdater.checkForUpdates()`
アップデートがあるかどうかサーバーに問い合わせます。APIを使う前に、`setFeedURL`をコールしなければなりません。
### `autoUpdater.quitAndInstall()`
ダウンロード後、アプリを再起動して、アップデートをインストールします。`update-downloaded`が出力された後のみ、コールすべきです。
[squirrel-mac]: https://github.com/Squirrel/Squirrel.Mac
[server-support]: https://github.com/Squirrel/Squirrel.Mac#server-support
[squirrel-windows]: https://github.com/Squirrel/Squirrel.Windows
[installer]: https://github.com/atom/grunt-electron-installer
[app-user-model-id]: https://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx

View file

@ -1,129 +0,0 @@
#サポートしているChromeコマンドラインスイッチ
> Electronでサポートされているコマンドラインスイッチ
アプリケーションのメインスクリプトで[app.commandLine.appendSwitch][append-switch]を使うことで、[app][app]モジュールの[ready][ready]イベントが発行される前にコマンドラインスイッチを追加できます。
```javascript
const {app} = require('electron')
app.commandLine.appendSwitch('remote-debugging-port', '8315')
app.commandLine.appendSwitch('host-rules', 'MAP * 127.0.0.1')
app.on('ready', () => {
// Your code here
})
```
## --ignore-connections-limit=`domains`
`domains`で指定されたリストは接続数制限を無視します。リストは`,`で区切られます。
## --disable-http-cache
HTTPリクエストのディスクキャッシュの無効化。
## --disable-http2
HTTP/2 と SPDY/3.1 プロトコルを無効にします。
## --remote-debugging-port=`port`
`port`で指定したHTTP越しのリモートデバッグの有効化。
## --js-flags=`flags`
JSエンジンに渡されるフラグの指定。メインプロセスで`flags`を有効化したいのなら、Electron開始時に渡される必要があります。
```bash
$ electron --js-flags="--harmony_proxies --harmony_collections" your-app
```
## --proxy-server=`address:port`
システム設定を上書きし、指定したプロキシサーバーを使用します。HTTPS、WebSocketリクエストを含むHTTPプロトコルのリクエストのみに影響します。全てのプロキシサーバーがHTTPSとWebSocketリクエストに対応しているわけではないことに注意してください。
## --proxy-bypass-list=`hosts`
プロキシを使用しないサーバーをセミコロンで区切って指定します。
このフラグは、`--proxy-server`と同時に使われるときのみに影響します。
例:
```javascript
app.commandLine.appendSwitch('proxy-bypass-list', '<local>;*.google.com;*foo.com;1.2.3.4:5678')
```
ローカルアドレス(`localhost`や`127.0.0.1`など)、`google.com`サブドメイン、`foo.com` サフィックスを含むホスト、`1.2.3.4:5678`を除いてすべてのホストでプロキシサーバーが使われます。
## --proxy-pac-url=`url`
`url`で指定したPACスクリプトが使われます。
## --no-proxy-server
プロキシサーバーを使わず、常に直接接続します。ほかのプロキシサーバーフラグを上書きします。
## --host-rules=`rules`
ホスト名がどのようにマップされているかを制御するコンマで分割された`rules`一覧
例:
* `MAP * 127.0.0.1` 全てのホスト名を127.0.0.1にマッピングするよう強制します。
* `MAP *.google.com proxy` すべてのgoogle.comサブドメインを "proxy"で解決するよう強制します。
* `MAP test.com [::1]:77` "test.com"をIPv6ループバックで解決するよう強制します。結果ポートのをソケットアドレス77番にするよう強制します。
* `MAP * baz, EXCLUDE www.google.com` 全てを"baz"に再マッピングし、 "www.google.com"は除外します。
これらのマッピングは、ネットリクエスト直接接続で、TCP接続とホスト解決とHTTPプロキシ接続での`CONNECT`、`SOCKS`プロキシ接続でのエンドポイントホスト)でエンドポイントホストに適用されます。
## --host-resolver-rules=`rules`
`--host-rules`のようですが、`rules` はホスト解決のみに適用されます。
## --ignore-certificate-errors
証明書関連エラーを無視します。
## --ppapi-flash-path=`path`
pepper flash pluginの`path`を設定します。
## --ppapi-flash-version=`version`
pepper flash pluginの`version`を設定します。
## --log-net-log=`path`
ネットログイベントを保存し、`path`に書き込みを有効化します。
## --disable-renderer-backgrounding
不可視のページのレンダラープロセスの優先度を下げることからChromiumを防ぎます。
このフラグは、グローバルですべてのレンダラープロセスに有効で、一つのウィンドウだけで無効化したい場合、[無音を再生する][play-silent-audio]というハックで対応します。
## --enable-logging
コンソールにChromiumのログを出力します。
ユーザーのアプリが読み込まれる前に解析されるため、`app.commandLine.appendSwitch`では使用できませんが、`ELECTRON_ENABLE_LOGGING`を環境変数に設定すると同じ効果を得ることができます。
## --v=`log_level`
標準のloggingレベルを設定します。0が既定です。通常、V-loggingレベルには正の値が使用されます。
`--enable-logging` が渡された時だけ、このスイッチは動作します。
## --vmodule=`pattern`
`--v`で付与された値を上書きするために、モジュール毎の最大V-loggingレベルを付与します。例えば、 `my_module=2,foo*=3` は、`my_module.*` と `foo*.*`のソースファイル全てのロギングレベルを変更します。
前方または後方スラッシュを含む任意のパターンは、全体のパス名だけでなく、モジュールに対してもテストとされます。例えば、`*/foo/bar/*=2`は`foo/bar`ディレクトリ下のソースファイルですべてのコードのロギングレベルを変更します。
このスイッチは、`--enable-logging`が渡された時のみ動作します。
[app]: app.md
[append-switch]: app.md#appcommandlineappendswitchswitch-value
[ready]: app.md#event-ready
[play-silent-audio]: https://github.com/atom/atom/pull/9485/files

View file

@ -1,103 +0,0 @@
# clipboard
`clipboard`モジュールは、コピーとペースト操作を実行するメソッドを提供します。次の例は、クリップボードに文字列を書き込む方法を示しています:
```javascript
const clipboard = require('electron').clipboard
clipboard.writeText('Example String')
```
X Windowsシステム上では、セレクションクリップボードがあります。それを操作するために、それぞれのメソッドで、`selection`を通す必要があります。
```javascript
clipboard.writeText('Example String', 'selection')
console.log(clipboard.readText('selection'))
```
## メソッド
`clipboard`モジュールには、次のメソッドがあります:
**Note:** 実験的APIには、そのようにマークしてあり、将来的には削除される可能性があります。
### `clipboard.readText([type])`
* `type` String (optional)
プレーンテキストとしてクリップボードの内容を返します。
### `clipboard.writeText(text[, type])`
* `text` String
* `type` String (optional)
プレーンテキストとしてクリップボードに`text`を書き込みます。
### `clipboard.readHTML([type])`
* `type` String (optional)
HTMLマークアップとして、クリップボードの内容を返します。
### `clipboard.writeHTML(markup[, type])`
* `markup` String
* `type` String (optional)
クリップボードにHTMLマークアップとして書き込みます。
### `clipboard.readImage([type])`
* `type` String (optional)
[NativeImage](native-image.md)としてクリップボードの内容を返します。
### `clipboard.writeImage(image[, type])`
* `image` [NativeImage](native-image.md)
* `type` String (optional)
`image` としてクリップボードに書き込みます。
### `clipboard.clear([type])`
* `type` String (optional)
クリップボードの内容をクリアします。
### `clipboard.availableFormats([type])`
* `type` String (optional)
`type`のクリップボードがサポートしているフォーマット配列を返します。
### `clipboard.has(data[, type])` _実験_
* `data` String
* `type` String (optional)
`data`で指定したフォーマットをクリップボードがサポートしているかどうかを返します。
```javascript
console.log(clipboard.has('<p>selection</p>'))
```
### `clipboard.read(data[, type])` _実験_
* `data` String
* `type` String (optional)
クリップボードから`data`を読み込みます。
### `clipboard.write(data[, type])`
* `data` Object
* `text` String
* `html` String
* `image` [NativeImage](native-image.md)
* `type` String (optional)
```javascript
clipboard.write({text: 'test', html: '<b>test</b>'})
```
クリップボードに`data`を書き込みます。

View file

@ -1,117 +0,0 @@
# contentTracing
`content-tracing`モジュールは、Chromiumコンテンツモジュールによって生成されるトーレスデータを収集するのに使われます。このモジュールはウェブインターフェイスを含んでいないので、Chromeブラウザーで `chrome://tracing/`を開いて、結果を表示するために生成されたファイルを読み込む必要があります。
```javascript
const contentTracing = require('electron').contentTracing
const options = {
categoryFilter: '*',
traceOptions: 'record-until-full,enable-sampling'
}
contentTracing.startRecording(options, function () {
console.log('Tracing started')
setTimeout(function () {
contentTracing.stopRecording('', function (path) {
console.log('Tracing data recorded to ' + path)
})
}, 5000)
})
```
## メソッド
`content-tracing`モジュールは次のメソッドを持っています。
### `contentTracing.getCategories(callback)`
* `callback` Function
カテゴリグループ一式を取得します。新しいコードパスに到達しているとしてカテゴリグループを変更できます。
一度、全ての子プロセスが`getCategories`リクエストを認識すると、カテゴリグループの配列で`callback`が呼び出されます。
### `contentTracing.startRecording(options, callback)`
* `options` Object
* `categoryFilter` String
* `traceOptions` String
* `callback` Function
全てのプロセスで記録を開始します。
EnableRecordingリクエストを受信するとすぐに、子プロセス上でただちに非同期にローカルに記録を始めます。全ての子プロセスが`startRecording`リクエストを認識すると、`callback`が呼び出されます。
`categoryFilter`はどのカテゴリグループをトレースすべきかをフィルタリングします。フィルターは、マッチしたカテゴリーを含むカテゴリグループを除外する`-`プレフィックスをオプションうぃ持っています。同じリストでの、対象カテゴリパターンと、除外カテゴリーパターンの両方を持つことはサポートしていません。
例:
* `test_MyTest*`,
* `test_MyTest*,test_OtherStuff`,
* `"-excluded_category1,-excluded_category2`
`traceOptions` は、どの種類のトレースを有効にするかを制御し、コンマ区切りのリストです。
取りうるオプション:
* `record-until-full`
* `record-continuously`
* `trace-to-console`
* `enable-sampling`
* `enable-systrace`
最初の3つのオプションは、トレースの記録モードで、そのため相互排他的です。`traceOptions`文字列に1つ以上のトレース記録モードが現れると、最後のモードが優先されます。トレース記録モードが指定されていない場合、記録モードは、`record-until-full`です。
適用される`traceOptions`からオプションをパースする前に、トレースオプションは最初に既定のオプションにリセットされます(`record_mode`は、`record-until-full`を設定し、 `enable_sampling``enable_systrace``false`に設定します)。
### `contentTracing.stopRecording(resultFilePath, callback)`
* `resultFilePath` String
* `callback` Function
全てのプロセスで記録を止めます。
子プロセスは基本的にトレースデータをキャッシュし、まれにフラッシュし、メインプロセスにトレースデータを送り返します。IPC越しにトレースデータを送信するのは高コストな操作なので、トレースのランタイムオーバーヘッドを最小限にするのに役立ちます。トレースが終了すると、保留されているトレースデータのフラッシュをするためにすべての子プロセスに非道に問い合わせすべきです。
一度、すべての子プロセスが`stopRecording` リクエストを認識すると、トレースデータを含んだファイルで`callback`が呼び出されます。
トレースデータは`resultFilePath`が空でなければ、そこに書き込まれ、空の場合は一時ファイルに書き込まれます。実際のファイルパスは`null`でなければ `callback` に通します。
### `contentTracing.startMonitoring(options, callback)`
* `options` Object
* `categoryFilter` String
* `traceOptions` String
* `callback` Function
全てのプロセス上で監視を開始します。
`startMonitoring`リクエスト受信するとすぐに、子プロセス上でローカルに非同期にただちに監視を始めます。
全ての子プロセスが`startMonitoring`リクエストを認識すると、`callback`がコールされます。
### `contentTracing.stopMonitoring(callback)`
* `callback` Function
全てのプロセス上で監視を止めます。
全ての子プロセスが`stopMonitoring`リクエスト認識すると、`callback`がコールされます。
### `contentTracing.captureMonitoringSnapshot(resultFilePath, callback)`
* `resultFilePath` String
* `callback` Function
現在の監視トレースデータを取得します。子プロセスは基本的にトレースデータをキャッシュし、まれにフラッシュし、メインプロセスにトレースデータを送り返します。IPC越しにトレースデータを送信するのは高コストな操作なので、トレースによる不必要なランタイムオーバーヘッドを避けるます。トレースが終了するために、保留されているトレースデータのフラッシュをするためにすべての子プロセスに非道に問い合わせすべきです。
全ての子プロセスが`captureMonitoringSnapshot`リクエストを認識すると、トレースデータを含んだファイルで`callback`が呼び出されます。
### `contentTracing.getTraceBufferUsage(callback)`
* `callback` Function
プロセスのトレースバッファのプロセス間で最大使用量をフルの状態の何%かで取得します。TraceBufferUsage値が設定されていると、 `callback`がコールされます。

View file

@ -1,66 +0,0 @@
# crashReporter
`crash-reporter`モジュールはアプリのクラッシュレポートを送信することができます。
リモートサーバーに自動的にクラッシュレポートを登録する例です。
```javascript
const crashReporter = require('electron').crashReporter
crashReporter.start({
productName: 'YourName',
companyName: 'YourCompany',
submitURL: 'https://your-domain.com/url-to-submit',
autoSubmit: true
})
```
## メソッド
`crash-reporter`モジュールは次のメソッドを持ちます:
### `crashReporter.start(options)`
`options` Object, properties:
* `productName` String, デフォルト: Electron.
* `companyName` String (**必須**)
* `submitURL` String, (**必須**)
* クラッシュレポートがPOSTで送信されるURL
* `autoSubmit` Boolean, デフォルト: `true`.
* ユーザーの判断なくクラッシュレポートを送信します
* `ignoreSystemCrashHandler` Boolean, デフォルト: `false`.
* `extra` Object
* あなたが定義できるオブジェクトは、レポートと一緒に送信されます。
* 文字列プロパティのみが正しく送信されます。
* オブジェクトのネストはサポートしていません。
他の`crashReporter`APIを使用する前にこのメソッドをコールする必要があります。
**Note:** macOSでは、Electronは、WindowsとLinux上の`breakpad` とは異なる、新しい`crashpad`クライアントを使用します。クラッシュ収集機能を有効にするために、メインプロセスや、クラッシュレポートを収集したいそれぞれのレンダラープロセスで、`crashpad`を初期化するために`crashReporter.start`APIをコールする必要があります。
### `crashReporter.getLastCrashReport()`
日付と最後のクラッシュレポートのIDを返します。もしなんのクラッシュレポートも送信されていないか、クラッシュレポーターが起動していない場合、`null`を返します。
### `crashReporter.getUploadedReports()`
すべてのアップロードされたクラッシュレポートが返されます。それぞれのレポートには日付とアップロードされたIDが含まれます。
## crash-reporter Payload
クラッシュレポーターは`POST`で`submitURL` に次のデーターが送信されます。
* `ver` String - Electronのバージョン
* `platform` String - 例: 'win32'.
* `process_type` String - 例: 'renderer'.
* `guid` String - 例: '5e1286fc-da97-479e-918b-6bfb0c3d1c72'
* `_version` String - `package.json`でのバージョン
* `_productName` String - `crashReporter`でのプロダクト名 `オプション`
object.
* `prod` String - 基盤となる製品の名前。この場合は、Electronです。
* `_companyName` String - `crashReporter`での会社名 `オプション`
object.
* `upload_file_minidump` File - ファイル形式のクラッシュレポート
* `crashReporter`での`extra`オブジェクトのすべてのレベル1のプロパティ
`オプション` object

View file

@ -1,65 +0,0 @@
# desktopCapturer
`desktopCapturer`モジュールは`getUserMedia`でキャプチャーするのに使える利用可能なソースを取得するのに使われます。
```javascript
// In the renderer process.
var desktopCapturer = require('electron').desktopCapturer
desktopCapturer.getSources({types: ['window', 'screen']}, function (error, sources) {
if (error) throw error
for (var i = 0; i < sources.length; ++i) {
if (sources[i].name === 'Electron') {
navigator.webkitGetUserMedia({
audio: false,
video: {
mandatory: {
chromeMediaSource: 'desktop',
chromeMediaSourceId: sources[i].id,
minWidth: 1280,
maxWidth: 1280,
minHeight: 720,
maxHeight: 720
}
}
}, gotStream, getUserMediaError)
return
}
}
})
function gotStream (stream) {
document.querySelector('video').src = URL.createObjectURL(stream)
}
function getUserMediaError (e) {
console.log('getUserMediaError')
}
```
`navigator.webkitGetUserMedia`用の制限されたオブジェクトコールを作成し、`desktopCapturer`からソースを使用するのなら、`chromeMediaSource`は`"desktop"`を設定し、`audio`は`false`を設定しなければなりません。
全てのデスクトップから音とビデオをキャプチャーしたいなら、`chromeMediaSource``"screen"`、`audio` に `true`.を設定します。このメソッドを使うとき、`chromeMediaSourceId`は指定できません。
## メソッド
`desktopCapturer`モジュールは次のメソッドを持ちます。
### `desktopCapturer.getSources(options, callback)`
* `options` Object
* `types` Array - キャプチャーされるデスクトップソースの種類一覧の文字列配列で、 提供される種類は`screen` と `window`です。
* `thumbnailSize` Object (オプション) - サムネイルがスケールすべきサイズの指定で、既定では`{width: 150, height: 150}` です。
* `callback` Function
全てのデスクトップソールを取得するためのリクエストを開始し、リクエストが完了すると、`callback`は`callback(error, sources)` でコールされます。
`sources`は、`Source`オブジェクトの配列で、それぞれの`Source`はキャプチャーしたスクリーンか、1つのウィンドウを示し、次のプロパティを持ちます。
* `id` String - The id of the captured window or screen used in
`navigator.webkitGetUserMedia`で使われるキャプチャーしたウィンドウか画面のidです。`window:XX` か`screen:XX`のようなフォーマットで、`XX`はランダムに生成された数字です。
* `name` String - キャプチャーする画面かウィンドウの説明名ソースが画面なら名前は`Entire Screen`で、`Screen <index>`はウィンドウで、名前はウィンドウのタイトルです。
* `thumbnail` [NativeImage](NativeImage.md) - サムネイル画像
**Note:** `source.thumbnail`のサイズはいつも`options`の`thumnbailSize`と同じ保証はありません。画面またはウィンドウのサイズに依存します。

View file

@ -1,87 +0,0 @@
# dialog
`dialog`モジュールは、ファイルやアラートを開くようなネイティブシステムダイアログを表示するためのAPIを提供します。そのため、ネイティブアプリケーションのようにウェブアプリケーションに同じユーザー体験を提供できます。
複数のファイルやディレクトリを選択するためのダイアログを表示する例です:
```javascript
const {dialog} = require('electron')
console.log(dialog.showOpenDialog({properties: ['openFile', 'openDirectory', 'multiSelections']}))
```
**Note for macOS**: シートとしてダイアログを表示したい場合、唯一しなければならないことは、`browserWindow`パラメーターを参照する`BrowserWindow`を提供することです。
## メソッド
`dialog`モジュールは次のメソッドを持っています:
### `dialog.showOpenDialog([browserWindow, ]options[, callback])`
* `browserWindow` BrowserWindow (オプション)
* `options` Object
* `title` String
* `defaultPath` String
* `filters` Array
* `properties` Array - ダイアログが使うべき機能を含め、`openFile`と`openDirectory`、`multiSelections`、`createDirectory`を含められます。
* `callback` Function (オプション)
成功したら、このメソッドはユーザーが選択したファイルパスの配列を返し、さうでなければ`undefined`を返します。
ユーザーが選択できる種類を制限したいときに、`filters`で表示したり選択できるファイル種別の配列を指定します。
```javascript
{
filters: [
{ name: 'Images', extensions: ['jpg', 'png', 'gif'] },
{ name: 'Movies', extensions: ['mkv', 'avi', 'mp4'] },
{ name: 'Custom File Type', extensions: ['as'] },
{ name: 'All Files', extensions: ['*'] }
]
}
```
`extensions`配列は、ワイルドカードやドットなしで拡張子を指定すべきです(例えば、`'png'`は良いですが、`'.png'` と `'*.png'`はダメです)。すべてのファイルを表示するために、`'*'`ワイルドカードを使用します(それいがいのワイルドカードはサポートしていません)。
`callback`を通すと、APIは非同期に読み出し、結果は`callback(filenames)`経由で通します。
**Note:** WindowsとLinuxでは、オープンダイアログがファイル選択とディレクトリ選択の両方を選択することはできません。プラットフォーム上で `properties`に`['openFile', 'openDirectory']`を設定すると、ディレクトリ選択が表示されます。
### `dialog.showSaveDialog([browserWindow, ]options[, callback])`
* `browserWindow` BrowserWindow (オプション)
* `options` Object
* `title` String
* `defaultPath` String
* `filters` Array
* `callback` Function (オプション)
成功すると、このメソッドはユーザーが選択したファイルのパスが返され、そうでなければ`undefined`が返されます。
`filters`が表示できるファイル種別配列を指定します。例えば、`dialog.showOpenDialog`を参照してください。
`callback`を通すと、APIは非同期でコールされ、結果は`callback(filename)`経由で通します。
### `dialog.showMessageBox([browserWindow, ]options[, callback])`
* `browserWindow` BrowserWindow (オプション)
* `options` Object
* `type` String - `"none"``"info"``"error"``"question"`、`"warning"`を設定できます。Windowsでは、 "icon"オプションを使用してアイコンを設定しない限り、"question"は"info"として同じアイコンを表示します。
* `buttons` Array - ボタン用のテキスト配列。
* `defaultId` Integer - メッセージボックスを開くとき、既定で選択されるボタン配列でのボタンインデックスです
* `title` String - メッセージボックスのタイトルで、いくつかのプラットフォームでは表示されません。
* `message` String - メッセージボックスのコンテンツ。
* `detail` String - メッセージの外部情報
* `icon` [NativeImage](native-image.md)
* `cancelId` Integer - ダイアログのボタンをクリックする代わりにユーザーがダイアログをキャンセルしたときに返す値です。既定では、ラベルの "cancel"や"no"を持つボタンのインデックスまたは、そのようなボタンが無ければ0を返します。macOSやWindowsでは、 すでに指定されているかどうかは関係なく、"Cancel"ボタンのインデックスはいつでも `cancelId`が使われます。
* `noLink` Boolean - Windowsでは、Electronは、 ("Cancel" または "Yes"のような)共通ボタンである`buttons`の一つを見つけようとし、ダイアログ内のコマンドリンクとして表示します。この挙動が気に入らない場合は、 `noLink``true`に設定できます。
* `callback` Function
メッセージボックスを表示し、メッセージボックスが閉じるまでプロセスをブロックします。クリックされたボタンのインデックスを返します。
`callback`が通されると、APIは非同期にコールし、結果は`callback(response)`経由で通されます。
### `dialog.showErrorBox(title, content)`
エラーメッセージを表示するモデルダイアログを表示します。
`app`モジュールが`ready`イベントを出力する前に、このAPIは安全にコールできます。スタートアップの早い段階でエラーを報告するのに通常は使われます。Linuxで、アプリの`ready`イベントの前にコールすると、メッセージは標準エラーに出力され、GUIダイアログは表示されません。

View file

@ -1,101 +0,0 @@
# DownloadItem
`DownloadItem`は、Electronでアイテムのダウンロードを示すEventEmitterです。 `Session`モジュールの`will-download`イベントで使用され、ダウンロードしたアイテムをコントロールすることができます。
```javascript
// In the main process.
const {BrowserWindow} = require('electron')
let win = new BrowserWindow()
win.webContents.session.on('will-download', (event, item, webContents) => {
// Set the save path, making Electron not to prompt a save dialog.
item.setSavePath('/tmp/save.pdf')
item.on('updated', (event, state) => {
if (state === 'interrupted') {
console.log('Download is interrupted but can be resumed')
} else if (state === 'progressing') {
if (item.isPaused()) {
console.log('Download is paused')
} else {
console.log(`Received bytes: ${item.getReceivedBytes()}`)
}
}
})
item.once('done', (event, state) => {
if (state === 'completed') {
console.log('Download successfully')
} else {
console.log(`Download failed: ${state}`)
}
})
})
```
## イベント
### イベント: 'updated'
`downloadItem`が更新されたときに出力されます。
### イベント: 'done'
* `event` Event
* `state` String
* `completed` - ダウンロードが成功で完了
* `cancelled` - ダウンロードをキャンセル
* `interrupted` - ファイルサーバーとの接続が切れてエラー
ダウンロードが終了状態になったときに出力されます。終了状態には、ダウンロードの完了、ダウンロードのキャンセル(`downloadItem.cancel()`経由)、レジュームできないダウンロードの中断などです。
## メソッド
`downloadItem`オブジェクトは次のメソッドを持ちます:
### `downloadItem.setSavePath(path)`
* `path` String - ダウンロードアイテムの保存ファイルパスを設定します。
APIはセッションの`will-download`コールバック関数のみで提供されます。API経由で保存パスを設定しなかった場合、Electronは保存パスを決めるための元のルーチン通常は保存ダイアログを使用します。
### `downloadItem.pause()`
ダウンロードをポーズします。
### `downloadItem.resume()`
ポーズしたダウンロードを再開します。
### `downloadItem.cancel()`
ダウンロード操作をキャンセルします。
### `downloadItem.getURL()`
どのURLからアイテムをダウンロードするのかを示す`String`を返します。
### `downloadItem.getMimeType()`
mimeタイプを示す`String`を返します。
### `downloadItem.hasUserGesture()`
ダウンロードがユーザージェスチャーを持っているかどうかを示す`Boolean`を返します。
### `downloadItem.getFilename()`
ダウンロードアイテムのファイル名を示す`String`を返します。
**Note:** ファイル名はローカルディスクに実際に保存するものといつも同じとは限りません。ダウンロード保存ダイアログでユーザーがファイル名を変更していると、保存するファイルの実際の名前は異なります。
### `downloadItem.getTotalBytes()`
ダウンロードアイテムの合計バイトサイズを示す`Integer`を返します。
サイズが不明な場合、0を返します。
### `downloadItem.getReceivedBytes()`
ダウンロードしたアイテムの受信バイト数を示す`Integer`を返します。
### `downloadItem.getContentDisposition()`
レスポンスヘッダーからContent-Dispositionを示す`String`を返します。

View file

@ -1,51 +0,0 @@
# 環境変数
> アプリケーションの設定や動作を、コードの変更なしで制御します。
コマンドラインやアプリのコードよりも早く初期化されるために、Electronのいくつかの挙動は環境変数がコントロールしています。
POSIX shellでの例:
```bash
$ export ELECTRON_ENABLE_LOGGING=true
$ electron
```
Windows コンソール上:
```powershell
> set ELECTRON_ENABLE_LOGGING=true
> electron
```
## `ELECTRON_RUN_AS_NODE`
通常のNode.jsプロセスでプロセスを開始します。
## `ELECTRON_ENABLE_LOGGING`
Chromeのインターナルログをコンソールに出力します。
## `ELECTRON_LOG_ASAR_READS`
ASARファイルからElectronが読み込んだとき、システム`tmpdir`へ読み込みオフセットとファイルのパスを記録します。ファイルの順序を最適化するために、得られたファイルはASARモジュールに提供されます。
## `ELECTRON_ENABLE_STACK_DUMPING`
Electronがクラッシュしたとき、コンソールにスタックとレースを出力します。
`crashReporter`が開始していないと、この環境変数は動作しません。
## `ELECTRON_DEFAULT_ERROR_MODE` _Windows_
Electronがクラッシュしたとき、Windowsのクラッシュダイアログを表示します。
`crashReporter`が開始していないと、この環境変数は動作しません。
## `ELECTRON_NO_ATTACH_CONSOLE` _Windows_
現在のコンソールセッションにはアタッチできません。
## `ELECTRON_FORCE_WINDOW_MENU_BAR` _Linux_
Linuxでグローバルメニューバーを使用できません。

View file

@ -1,29 +0,0 @@
# `File` object
> ファイルシステム上のファイルを扱うには、HTML5のFile APIを使用します。
DOMのファイルインターフェイスにより、ユーザーはHTML 5 ファイルAPIで直接、ネイティブファイルで作業できるように、ネイティブファイル周りの抽象化を提供します。Electronは、ファイルシステム上のファイルの実際のパスを公開する`File`インターフェイスの`path`属性を追加します。
アプリ上にドラッグしたファイルの実際のパスを取得する例:
```html
<div id="holder">
Drag your file here
</div>
<script>
const holder = document.getElementById('holder');
holder.ondragover = () => {
return false;
};
holder.ondragleave = holder.ondragend = () => {
return false;
};
holder.ondrop = (e) => {
e.preventDefault();
const file = e.dataTransfer.files[0];
console.log('File you dragged here is', file.path);
return false;
};
</script>
```

View file

@ -1,73 +0,0 @@
# Frameless Window
フレームの無いウィンドウは、ウェブページの一部ではなく、ツールバーのようなウィンドウのパーツで、[chrome](https://developer.mozilla.org/en-US/docs/Glossary/Chrome)ではないウィンドウです。 オプションとして[`BrowserWindow`](browser-window.md)クラスがあります。
## フレームの無いウィンドウを作成する
フレームの無いウィンドウを作成するために、[BrowserWindow](browser-window.md)の `options`で、`frame` を `false`に設定する必要があります。
```javascript
const BrowserWindow = require('electron').BrowserWindow
var win = new BrowserWindow({ width: 800, height: 600, frame: false })
```
### macOSでの別の方法
macOS 10.10 Yosemite以降では、Chrome無しのウィンドウを指定する方法があります。`frame`を`false`に設定しタイトルバーとウィンドウコントロールの両方を無効にする代わりに、タイトルバーを隠しコンテンツをフルウィンドウサイズに広げたいけど、標準的なウィンドウ操作用にウィンドウコントロール("トラフィックライト")を維持したいかもしれません。新しい`titleBarStyle`オプションを指定することで、そうできます。
```javascript
var win = new BrowserWindow({ 'titleBarStyle': 'hidden' })
```
## 透明なウィンドウ
`transparent`オプションを`true`に設定すると、フレームの無い透明なウィンドウを作成できます。
```javascript
var win = new BrowserWindow({ transparent: true, frame: false })
```
### 制限
* 透明領域をクリックすることはできません。この問題を解決するためにウィンドウの輪郭を設定するAPIを導入しようとしています。詳細は、[our issue](https://github.com/electron/electron/issues/1335) を参照してください。
* 透明なウィンドウはサイズ変更できません。いくつかのプラットフォーム上では、`resizable`の`true`設定は、いくつかのプラットフォーム上で、動作を停止する透明ウィンドウを作成するかもしれません。
* `blur`フィルターはウェブページのみに適用され、ウィンドウの下のコンテンツ(例えば、ユーザーのシステム上でほかのアプリケーションを開く)に、ぼやける効果を適用する方法はありません。
* Windows オペレーティングシステム上では、DMMが無効のとき透明なウィンドウは動作しません。
* Linuxユーザーは、GPUを無効化するためにコマンドラインで`--enable-transparent-visuals --disable-gpu`を設定でき、透明ウィンドウを作成するためにARGBを許可でき、これは、 [いくつかのNVidiaドライバー上でアルファチャンネルが動作しない](https://code.google.com/p/chromium/issues/detail?id=369209) という上流のバグ原因になります。
* Macでは、透明なウィンドウでネイティブのウィンドウシャドーを表示できません。
## ドラッグ可能領域
既定では、フレーム無しウィンドウはドラッグできません。OSの標準的なタイトルバーのようなドラッグできる領域をElectronに指定するには、CSSで`-webkit-app-region: drag`を指定する必要があり、アプリはドラッグできる領域からドラッグできない領域を除外するために、`-webkit-app-region: no-drag`を使えます。現在のところ長方形領域のみサポートしています。
ウィンドウ全体をドラッグできるようにするには、`body`のスタイルに`-webkit-app-region: drag`を追加します。
```html
<body style="-webkit-app-region: drag">
</body>
```
ウィンドウ全体度ドラッグできるようにするには、ボタンをドラッグできないように指定する必要があり、そうしなければユーザーがそれをクリックする可能性があります。
```css
button {
-webkit-app-region: no-drag;
}
```
カスタムタイトルバーをドラッグできるように設定すると、タイトルバーのすべてのボタンをドラッグできないようにする必要があります。
## テキスト選択
フレームの無いウィンドウでは、ドラッグを可能にする動作とテキスト選択がぶつかるかもしれません。例えば、タイトルバーをドラッグしたとき、うっかりタイトルバーのテキストを選択してしまうかもしれません。これを防ぐために、次の例のようにドラッグできる領域内のテキスト選択を無効にする必要があります。
```css
.titlebar {
-webkit-user-select: none;
-webkit-app-region: drag;
}
```
## コンテキストメニュー
いくつかのプラットフォームでは、ドラッグ可能な領域は、クライアントフレーム無しとして扱われるので、その上で右クリックすると、システムメニューがポップアップします。コンテキストメニューをすべてのプラットフォームで正しく動作するようにするためには、ドラッグ可能領域でカスタムコンテキストメニューを使用しないでください。

View file

@ -1,64 +0,0 @@
# globalShortcut
さまざまなショートカットの動作をカスタマイズするために、オペレーティングシステムのグローバルのキーボードショートカットを`globalShortcut`モジュールは登録したり、解除したりできます。
**Note:** ショートカットはグローバルです。アプリがキーボードフォーカスを持っていなくても動作します。`app`モジュールの `ready`イベントが出力されるまでは使うべきではありません。
```javascript
const electron = require('electron')
const app = electron.app
const globalShortcut = electron.globalShortcut
app.on('ready', function () {
// Register a 'ctrl+x' shortcut listener.
var ret = globalShortcut.register('ctrl+x', function () {
console.log('ctrl+x is pressed')
})
if (!ret) {
console.log('registration failed')
}
// Check whether a shortcut is registered.
console.log(globalShortcut.isRegistered('ctrl+x'))
})
app.on('will-quit', function () {
// Unregister a shortcut.
globalShortcut.unregister('ctrl+x')
// Unregister all shortcuts.
globalShortcut.unregisterAll()
})
```
## メソッド
`globalShortcut`モジュールは次のメソッドを持ちます:
### `globalShortcut.register(accelerator, callback)`
* `accelerator` [Accelerator](accelerator.md)
* `callback` Function
`accelerator`のグローバルショートカットを登録します。`callback`は、ユーザーが登録しているショートカットを押したときにコールされます。
ほかのアプリケーションがすでにacceleratorを使用している時、この呼び出しは静かに失敗します。アプリケーション間でグローバルショートカットの争いをしてほしくないので、オペレーティングシステムはこの挙動を採用しています。
### `globalShortcut.isRegistered(accelerator)`
* `accelerator` [Accelerator](accelerator.md)
このアプリケーションが`accelerator`に登録されているかどうかを返します。
acceleratorがすでにほかのアプリケーションで取得していると、このコールは、`false`を返します。アプリケーション間でグローバルショートカットの争いをしてほしくないので、オペレーティングシステムはこの挙動を採用しています。
### `globalShortcut.unregister(accelerator)`
* `accelerator` [Accelerator](accelerator.md)
Unregisters the global shortcut of `accelerator`のグローバルショートカットを解除します。
### `globalShortcut.unregisterAll()`
全てのグローバルショートカットを解除します。

View file

@ -1,79 +0,0 @@
# ipcMain
`ipcMain`モジュールは[EventEmitter](https://nodejs.org/api/events.html)クラスのインスタンスです。メインプロセスで使うと、レンダラ―プロセス(ウェブページ)から非同期、同期敵にメッセージ送信できます。レンダラ―から送信されたメッセージはこのモジュールに出力されます。
## メッセージ送信
メインプロレスからレンダラ―プロセスへメッセージ送信を可能にします。さらなる情報は、[webContents.send](web-contents.md#webcontentssendchannel-arg1-arg2-) を参照してください。
* メッセージを送信するとき、イベント名は`channel`です。
* 同期的にメッセージを返信するために、`event.returnValue`を設定する必要があります。
* 送信者に非同期に戻して送信するために、 `event.sender.send(...)`を使えます。
レンダラーとメインプロセス間でメッセージの送信とハンドリングをする例です:
```javascript
// In main process.
const ipcMain = require('electron').ipcMain
ipcMain.on('asynchronous-message', function (event, arg) {
console.log(arg) // prints "ping"
event.sender.send('asynchronous-reply', 'pong')
})
ipcMain.on('synchronous-message', function (event, arg) {
console.log(arg) // prints "ping"
event.returnValue = 'pong'
})
```
```javascript
// In renderer process (web page).
const ipcRenderer = require('electron').ipcRenderer
console.log(ipcRenderer.sendSync('synchronous-message', 'ping')) // prints "pong"
ipcRenderer.on('asynchronous-reply', function (event, arg) {
console.log(arg) // prints "pong"
})
ipcRenderer.send('asynchronous-message', 'ping')
```
## メッセージ受信
`ipcMain`モジュールが持つイベント受信用のメソッドです。
### `ipcMain.on(channel, callback)`
* `channel` String - イベント名
* `callback` Function
イベントが発生すると、`callback`が`event`と任意の引数でコールされます。
### `ipcMain.removeListener(channel, callback)`
* `channel` String - イベント名
* `callback` Function - 使用したのと同じ関数への参照です
`ipcMain.on(channel, callback)`
一度メッセージを受信すると、もうコールバックをアクティブにしたくなく、何らかの理由でメッセージ送信を単に止めるには、この関数が指定したチャンネルのコールバックハンドラーを削除します。
### `ipcMain.removeAllListeners(channel)`
* `channel` String - The event name.
このipcチャンネルの *全ての* ハンドラーを削除します。
### `ipcMain.once(channel, callback)`
ハンドラーの実行のために`ipcMain.on()`の代わりにこれを使うと、一度だけ発生することを意味し、`callback`の一回のコールの後にアクティブにしないのと同じです。
## IPC Event
`callback`に渡される`event`オブジェクトには次のメソッドがあります。
### `event.returnValue`
値にこれを設定すると同期メッセージを返します。
### `event.sender`
送信したメッセージ`webContents`を返すと、非同期にメッセージを返信するために`event.sender.send`をコールできます。さらなる情報は、[webContents.send](web-contents.md#webcontentssendchannel-arg1-arg2-) を見てください。

View file

@ -1,66 +0,0 @@
# ipcRenderer
`ipcRenderer`モジュールは[EventEmitter](https://nodejs.org/api/events.html) クラスのインスタンスです。レンダープロセス(ウェブページ)からメインプロセスに同期、非同期にメッセージを送信できるメソッドを提供します。メインプロセスから返答を受け取ることもできます。
コード例は [ipcMain](ipc-main.md) をみてください。
## メッセージの受信
`ipcRenderer`モジュールは、イベントを受信するための次のメソッドを持ちます:
### `ipcRenderer.on(channel, callback)`
* `channel` String - イベント名
* `callback` Function
イベントが発生したとき、任意の引数と `event`オブジェクトで`callback`をコールします。
### `ipcRenderer.removeListener(channel, callback)`
* `channel` String - イベント名
* `callback` Function - 使用したのと同じ関数への参照
`ipcRenderer.on(channel, callback)`
一度メッセージを受信すると、もうコールバックをアクティブにしたくなく、何らかの理由でメッセージ送信を単に止めるには、この関数が指定したチャンネルのコールバックハンドラーを削除します。
### `ipcRenderer.removeAllListeners(channel)`
* `channel` String - The event name.
このipcチャンネルの *全ての* ハンドラーを削除します。
### `ipcMain.once(channel, callback)`
ハンドラーの実行のために`ipcMain.on()`の代わりにこれを使うと、一度だけ発生することを意味し、`callback`の一回のコールの後にアクティブにしないのと同じです。
## メッセージ送信
`ipcRenderer`モジュールは、イベントを送信するための次のメソッドを持ちます:
### `ipcRenderer.send(channel[, arg1][, arg2][, ...])`
* `channel` String - イベント名
* `arg` (optional)
`channel`
`channel`経由でメインプロセスに非同期にイベントを送信し、任意の引数を送信できます。メインプロセスは`ipcMain`で`channel`を受信することでハンドルします。
### `ipcRenderer.sendSync(channel[, arg1][, arg2][, ...])`
* `channel` String - イベント名
* `arg` (optional)
`channel`経由でメインプロセスに同期的にイベントを送信し、任意の引数を送信できます。
メインプロセスは`ipcMain`で`channel`を受信することでハンドルし、 `event.returnValue`を設定してリプライします。
__Note:__ 同期的なメッセージ送信をすると全てのレンダラ―プロセスがブロックされるので、何をしているか理解できない限り、これを使うべきではありません。
### `ipcRenderer.sendToHost(channel[, arg1][, arg2][, ...])`
* `channel` String - イベント名.
* `arg` (optional)
`ipcRenderer.send`のようですが、メインプロセスの代わりにホストに`<webview>`エレメントにイベントを送信します。

View file

@ -1,50 +0,0 @@
# MenuItem
`menu-item`モジュールは、アプリケーションまたはコンテキスト[`メニュー`](menu.md)に項目を追加することができます。
具体例は、 [`menu`](menu.md) を見てください。
## クラス: MenuItem
次のメソッドで、新しい`MenuItem`を作成します。
### new MenuItem(options)
* `options` Object
* `click` Function - メニューアイテムがクリックされたとき、`click(menuItem, browserWindow)`がコールされます。
* `role` String - 指定されたとき、メニューアイテムの動作が定義され、`click`プロパティは無視されます。
* `type` String - `normal``separator`、`submenu`、`checkbox`、`radio`を指定できます。
* `label` String
* `sublabel` String
* `accelerator` [Accelerator](accelerator.md)
* `icon` [NativeImage](native-image.md)
* `enabled` Boolean
* `visible` Boolean
* `checked` Boolean
* `submenu` Menu - メニューアイテムを省略できる`type: 'submenu'`を指定したとき、`submenu`種類のメニューアイテムを指定すべきです。値が`Menu`でないとき、`Menu.buildFromTemplate`を使用して自動的に変換されます。
* `id` String - 1つのメニュー内で一意です。定義されていたら、position属性によってアイテムへの参照として使用できます。
* `position` String - このフィールドは、指定されたメニュー内の特定の位置を細かく定義できます。
メニューアイテムを作成するとき、適切な動作がある場合は、メニューでベストな自然な体験を提供するために、手動で実装する代わりに`role`を指定することを推奨します。
`role` プロパティは次の値を持ちます:
* `undo`
* `redo`
* `cut`
* `copy`
* `paste`
* `selectall`
* `minimize` - 現在のウィンドウの最小化
* `close` - 現在のウィンドウを閉じます
macOSでは、`role`は次の追加の値を取れます:
* `about` - `orderFrontStandardAboutPanel`動作に紐づけられます
* `hide` - `hide`動作に紐づけられます
* `hideothers` - `hideOtherApplications`動作に紐づけられます
* `unhide` - `unhideAllApplications`動作に紐づけられます
* `front` - `arrangeInFront`動作に紐づけられます
* `window` - サブメニューは "Window"メニューです。
* `help` - サブメニューは "Help"メニューです。
* `services` - サブメニューは "Services"メニューです。

View file

@ -1,338 +0,0 @@
# Menu
`menu`クラスは、アプリケーションのメニューと[コンテキストメニュー](https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL/PopupGuide/ContextMenus)として使えるネイティブメニューを作成するのに使われます。このモジュールは、`remote`モジュール経由でレンダラープロセスで使用できるメインプロセスのモジュールです。
個々のメニューは複数の[menu items](menu-item.md)で成り立ち、個々のメニューアイテムはサブメニューを持てます。
以下は、ユーザーはページを右クリックした時、[remote](remote.md)モジュールを作成するために、(レンダラープロセス)ウェブページで動的にメニューを作成して、表示します。
```html
<!-- index.html -->
<script>
const remote = require('electron').remote;
const Menu = remote.Menu;
const MenuItem = remote.MenuItem;
var menu = new Menu();
menu.append(new MenuItem({ label: 'MenuItem1', click: function() { console.log('item 1 clicked'); } }));
menu.append(new MenuItem({ type: 'separator' }));
menu.append(new MenuItem({ label: 'MenuItem2', type: 'checkbox', checked: true }));
window.addEventListener('contextmenu', function (e) {
e.preventDefault();
menu.popup(remote.getCurrentWindow());
}, false);
</script>
```
シンプルなテンプレートAPIでレンダラープロセスでアプリケーションメニューを作成する例です。
```javascript
var template = [
{
label: 'Edit',
submenu: [
{
label: 'Undo',
accelerator: 'CmdOrCtrl+Z',
role: 'undo'
},
{
label: 'Redo',
accelerator: 'Shift+CmdOrCtrl+Z',
role: 'redo'
},
{
type: 'separator'
},
{
label: 'Cut',
accelerator: 'CmdOrCtrl+X',
role: 'cut'
},
{
label: 'Copy',
accelerator: 'CmdOrCtrl+C',
role: 'copy'
},
{
label: 'Paste',
accelerator: 'CmdOrCtrl+V',
role: 'paste'
},
{
label: 'Select All',
accelerator: 'CmdOrCtrl+A',
role: 'selectall'
}
]
},
{
label: 'View',
submenu: [
{
label: 'Reload',
accelerator: 'CmdOrCtrl+R',
click: function (item, focusedWindow) {
if (focusedWindow) focusedWindow.reload()
}
},
{
label: 'Toggle Full Screen',
accelerator: (function () {
if (process.platform === 'darwin') {
return 'Ctrl+Command+F'
} else {
return 'F11'
}
})(),
click: function (item, focusedWindow) {
if (focusedWindow) {
focusedWindow.setFullScreen(!focusedWindow.isFullScreen())
}
}
},
{
label: 'Toggle Developer Tools',
accelerator: (function () {
if (process.platform === 'darwin') {
return 'Alt+Command+I'
} else {
return 'Ctrl+Shift+I'
}
})(),
click: function (item, focusedWindow) {
if (focusedWindow) focusedWindow.toggleDevTools()
}
}
]
},
{
label: 'Window',
role: 'window',
submenu: [
{
label: 'Minimize',
accelerator: 'CmdOrCtrl+M',
role: 'minimize'
},
{
label: 'Close',
accelerator: 'CmdOrCtrl+W',
role: 'close'
}
]
},
{
label: 'Help',
role: 'help',
submenu: [
{
label: 'Learn More',
click: function () { require('electron').shell.openExternal('https://electron.atom.io') }
}
]
}
]
if (process.platform === 'darwin') {
var name = require('electron').remote.app.getName()
template.unshift({
label: name,
submenu: [
{
label: 'About ' + name,
role: 'about'
},
{
type: 'separator'
},
{
label: 'Services',
role: 'services',
submenu: []
},
{
type: 'separator'
},
{
label: 'Hide ' + name,
accelerator: 'Command+H',
role: 'hide'
},
{
label: 'Hide Others',
accelerator: 'Command+Alt+H',
role: 'hideothers'
},
{
label: 'Show All',
role: 'unhide'
},
{
type: 'separator'
},
{
label: 'Quit',
accelerator: 'Command+Q',
click: function () { app.quit() }
}
]
})
// Window menu.
template[3].submenu.push(
{
type: 'separator'
},
{
label: 'Bring All to Front',
role: 'front'
}
)
}
var menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)
```
## クラス: Menu
### `new Menu()`
新しいメニューを作成します。
## メソッド
`menu`クラスーは次のメソッドを持ちます。
### `Menu.setApplicationMenu(menu)`
* `menu` Menu
macOSで、アプリケーションメニューとして`menu`を設定します。WindowsとLinuxでは、`menu`はそれぞれのウィンドウの上のメニューとして設定されます。
### `Menu.sendActionToFirstResponder(action)` _macOS_
* `action` String
アプリケーションの最初のレスポンダーに`action`が送信されます。規定のCocoaメニュー動作をエミュレートするために使われ、通常は`MenuItem`の`role`プロパティーを使います。
### `Menu.buildFromTemplate(template)`
* `template` Array
一般的に、`template`は、[MenuItem](menu-item.md)を組み立てるための `options`配列です。使用方法は下のように参照します。
ほかのフィールドに`template`の項目を設定でき、メニューアイテムを構成するプロパティです。
### `Menu.popup([browserWindow, x, y, positioningItem])`
* `browserWindow` BrowserWindow (オプション) - 既定では`null`です。
* `x` Number (オプション) - 既定では -1です。
* `y` Number (**必須** `x` が使われている場合) - 既定では -1です。
* `positioningItem` Number (オプション) _macOS_ - 既定では -1です。
メニューアイテムのインデックスを指定した座標にマウスカーソルを配置します。
`browserWindow`でコンテキストメニューとしてメニューをポップアップします。メニューを表示する場所をオプションで`x, y`座標を指定でき、指定しなければ現在のマウスカーソル位置に表示します。
### `Menu.append(menuItem)`
* `menuItem` MenuItem
メニューに`menuItem`を追加します。
### `Menu.insert(pos, menuItem)`
* `pos` Integer
* `menuItem` MenuItem
メニューの`pos`位置に`menuItem`を追加します。
### `Menu.items()`
メニューのアイテムを収容した配列を取得します。
## macOS アプリケーションメニューの注意事項
macOSは、WindowsとLinuxのアプリケーションのメニューとは完全に異なるスタイルを持ち、よりネイティブのようにアプリメニューを作成するのに幾つかの注意事項があります。
### 標準的なメニュー
macOSでは、`Services`と`Windows`メニューのように定義された標準的な多くのメニューがあります。標準的なメニューを作成するために、メニューの`role`に次のどれかを設定する必要があり、Electronはそれを受けて標準的なメニューを作成します。
* `window`
* `help`
* `services`
### 標準的なメニューアイテムの動作
`About xxx`と`Hide xxx`、`Hide Others`のようないくつかのメニューアイテム用にmacOSは標準的な動作を提供します。メニューアイテムの動作に標準的な動作を設定するために、メニューアイテムの`role`属性を設定すべきです。
### メインのメニュー名
macOSでは、設定したラベルに関係なく、アプリケーションの最初のアイテムのラベルはいつもアプリの名前です。変更するために、アプリにバンドルされている`Info.plist`ファイルを修正してアプリの名前を変更する必要があります。詳細は、 [About Information Property List Files][AboutInformationPropertyListFiles] を見てください。
## メニューアイテムの位置
`position`を使用することができ、`Menu.buildFromTemplate`でメニューを構築するときに`id`がアイテムを配置する方法をコントロールします。
`MenuItem`の`position`属性は、`[placement]=[id]`をもち、 `placement`は`before`や `after``endof`の一つが設定され、`id`はメニューの設定されているアイテムで一意のIDです。
* `before` - IDから参照したアイテムの前にアイテムを挿入します。参照するアイテムが存在しないのなら、メニューの最後にアイテムが挿入されます。
* `after` - IDから参照したアイテムの後にアイテムを挿入します。参照するアイテムが存在しないのなら、メニューの最後にアイテムが挿入されます。
* `endof` -IDから参照したアイテムを含む論理グループの最後にアイテムを挿入しますグループはアイテムを分けるために作成されます。参照するアイテムが存在しないのなら、付与されたIDで新しい分離グループが作成され、そのグループのあとにアイテムが挿入されます。
アイテムが配置されたとき、新しいアイテムが配置されるまで、すべての配置されていないアイテムがその後に挿入されます。同じ場所にメニューアイテムのグループを配置したいのなら、最初にアイテムで場所を指定する必要があります。
### 具体例
テンプレート:
```javascript
[
{label: '4', id: '4'},
{label: '5', id: '5'},
{label: '1', id: '1', position: 'before=4'},
{label: '2', id: '2'},
{label: '3', id: '3'}
]
```
メニュー:
```
- 1
- 2
- 3
- 4
- 5
```
テンプレート:
```javascript
[
{label: 'a', position: 'endof=letters'},
{label: '1', position: 'endof=numbers'},
{label: 'b', position: 'endof=letters'},
{label: '2', position: 'endof=numbers'},
{label: 'c', position: 'endof=letters'},
{label: '3', position: 'endof=numbers'}
]
```
メニュー:
```
- ---
- a
- b
- c
- ---
- 1
- 2
- 3
```
[AboutInformationPropertyListFiles]: https://developer.apple.com/library/ios/documentation/general/Reference/InfoPlistKeyReference/Articles/AboutInformationPropertyListFiles.html

View file

@ -1,147 +0,0 @@
# nativeImage
Electronでは、画像を取得するAPI用に、ファイルパスまたは`nativeImage`インスタンスを渡します。`null`を渡すと、空のイメージが使われます。
例えば、トレイを作成したり、ウィンドウアイコンを設定する時、`String`としてイメージファイルパスを渡します:
```javascript
var appIcon = new Tray('/Users/somebody/images/icon.png')
var window = new BrowserWindow({icon: '/Users/somebody/images/window.png'})
```
もしくは、`nativeImage`を返すクリップボードからイメージを読み込みます:
```javascript
var image = clipboard.readImage()
var appIcon = new Tray(image)
```
## 対応しているフォーマット
今のところ、`PNG` と `JPEG`の画像フォーマットに対応しています。透明や可逆圧縮に対応しているので、`PNG` を推奨します。
Windowsでは、ファイルパスから`ICO`アイコンをロードできます。
## 高解像度画像
高DPIに対応しているプラットフォームで、高解像度としてマークするためにイメージの基本ファイル名の後に`@2x`を追加できます。
例えば、`icon.png`は一般的な解像度の通常の画像で、`icon@2x.png`は、倍のDPI密度を持つ高解像度画像として扱われます。
同時に異なるDPI密度をディスプレイで対応したい場合、同じフォルダーに異なるサイズの画像を置き、DPIサフィックスなしでファイル名を使用します。
例:
```text
images/
├── icon.png
├── icon@2x.png
└── icon@3x.png
```
```javascript
var appIcon = new Tray('/Users/somebody/images/icon.png')
```
次のDPIサフィックスに対応しています:
* `@1x`
* `@1.25x`
* `@1.33x`
* `@1.4x`
* `@1.5x`
* `@1.8x`
* `@2x`
* `@2.5x`
* `@3x`
* `@4x`
* `@5x`
## テンプレート画像
テンプレート画像は、黒とクリアな色(とアルファチャンネル)で成り立ちます。テンプレート画像は画像単体での使用は想定しておらず、通常は最終的にほしい画像を生成するためにほかのコンテンツと合成します。
もっとも一般的なケースは、ライトとダークなメニュバー両方に切り替え可能なメニュバーアイコン用にテンプレート画像を使います。
**Note:** テンプレート画像は、macOSでのみサポートしています。
テンプレート画像として画像をマークするために、ファイル名の最後に`Template`をつけます。
例:
* `xxxTemplate.png`
* `xxxTemplate@2x.png`
## メソッド
`nativeImage`クラスは次のメソッドを持ちます:
### `nativeImage.createEmpty()`
空の`nativeImage` インスタンスを生成します。
### `nativeImage.createFromPath(path)`
* `path` String
`path`で指定したファイルから新しい`nativeImage`を生成します。
### `nativeImage.createFromBuffer(buffer[, scaleFactor])`
* `buffer` [Buffer][buffer]
* `scaleFactor` Double (optional)
`buffer`から新しい`nativeImage`インスタンスを生成します。既定では、`scaleFactor`は1.0です。
### `nativeImage.createFromDataURL(dataURL)`
* `dataURL` String
`dataURL`から新しい `nativeImage`インスタンスを生成します。
## インスタンスメソッド
`nativeImage`のインスタンス上で提供されるメソッド:
```javascript
const nativeImage = require('electron').nativeImage
var image = nativeImage.createFromPath('/Users/somebody/images/icon.png')
```
### `image.toPNG()`
`PNG`エンコードされた画像を含む[Buffer][buffer]を返します。
### `image.toJPEG(quality)`
* `quality` Integer (**required**) - Between 0 - 100.
`JPEG`エンコードされた画像を含む[Buffer][buffer]を返します。
### `image.toDataURL()`
画像のURLデータを返します。
### `image.isEmpty()`
画像が空かどうかをブーリアン値で返します。
### `image.getSize()`
画像サイズを返します。
[buffer]: https://nodejs.org/api/buffer.html#buffer_class_buffer
### `image.setTemplateImage(option)`
* `option` Boolean
テンプレート画像としてマークします。
### `image.isTemplateImage()`
イメージがテンプレート画像かどうかをブーリアン値で返します。

View file

@ -1,33 +0,0 @@
# powerMonitor
`power-monitor`モジュールは、パワー状態の変更の監視に使われます。メインプロセスでみ使用することができます。`app`モジュールの`ready`が出力されるまで、このモジュールを使うべきではありません。
例:
```javascript
app.on('ready', function () {
require('electron').powerMonitor.on('suspend', function () {
console.log('The system is going to sleep')
})
})
```
## イベント
`power-monitor`モジュールは次のイベントを出力します。:
### イベント: 'suspend'
システムがサスペンドのときに出力されます。
### イベント: 'resume'
システムがレジュームのときに出力されます。
### イベント: 'on-ac'
システムがACパワーに変わったときに出力されます。
### イベント: 'on-battery'
システムがバッテリーパワーに変わったときに出力されます。

View file

@ -1,42 +0,0 @@
# powerSaveBlocker
`powerSaveBlocker`モジュールは、省電力(スリープ)モードからシステムをブロックするのに使用され、それ故にアプリがシステムと画面をアクティブに維持することができます。
例:
```javascript
const powerSaveBlocker = require('electron').powerSaveBlocker
var id = powerSaveBlocker.start('prevent-display-sleep')
console.log(powerSaveBlocker.isStarted(id))
powerSaveBlocker.stop(id)
```
## メソッド
`powerSaveBlocker`モジュールは次のメソッドを持ちます:
### `powerSaveBlocker.start(type)`
* `type` String - パワーセーブのブロック種類です。
* `prevent-app-suspension` - アプリケーションがサスペンドになるのを防ぎます。システムのアクティブ状態を維持できますが、画面をオフにすることができます。使用例:ファイルのダウンロードまたは音楽の再生
* `prevent-display-sleep`- ディスプレイがスリープになるのを防ぎます。システムと画面のアクティブ状態を維持できます。使用例:ビデオ再生
省電力モードに入るのを防止するシステムを開始します。パワーセーブブロッカーを確認する数字を返します。
**Note:** `prevent-display-sleep`は`prevent-app-suspension`より高い優先権を持ちます。最も優先権が高いタイプのみが影響します。言い換えれば。`prevent-display-sleep`はいつも`prevent-app-suspension`より高い優先権をもちます。
例えば、APIが`prevent-app-suspension`を要求するAをコールし、ほかのAPIが`prevent-display-sleep`を要求するBをコールすると、`prevent-display-sleep`はBのリクエストが止まるまで使われ、そのあと`prevent-app-suspension`が使われます。
### `powerSaveBlocker.stop(id)`
* `id` Integer - `powerSaveBlocker.start`によって、パワーセーブブロッカーIDが返されます。
指定したパワーセーブブロッカーを停止します。
### `powerSaveBlocker.isStarted(id)`
* `id` Integer - `powerSaveBlocker.start`によって、パワーセーブブロッカーIDが返されます。
`powerSaveBlocker`が開始したかどうかのブーリアン値を返します。

View file

@ -1,100 +0,0 @@
# process
> processオブジェクトの拡張。
Electronの`process`オブジェクトは次のようなAPIで拡張されています。
## イベント
### イベント: 'loaded'
このイベントはElectronが内部の初期化スクリプトをロードし、ウェブページまたはメインスクリプトのロードが始まるときに発行されます。
Node統合がオフになっているとき、削除したNodeグローバルシンボルをグローバルスコープへ戻すために、プリロードスクリプトで使用できます。
```javascript
// preload.js
var _setImmediate = setImmediate
var _clearImmediate = clearImmediate
process.once('loaded', function () {
global.setImmediate = _setImmediate
global.clearImmediate = _clearImmediate
})
```
## プロパティ
### `process.noAsar`
これを`true`に設定すると、Nodeのビルトインモジュールで、`asar`アーカイブのサポートを無効にできます。
### `process.type`
現在のプロセスのタイプで、`"browser"`(例: メインプロセス) または `"renderer"`の値をとります。
### `process.versions.electron`
Electronのバージョン文字列です。
### `process.versions.chrome`
Chromeのバージョン文字列です。
### `process.resourcesPath`
リソースディレクトリのパスです。
### `process.mas`
Mac app Store用のビルドでは値は`true`になります。ほかのビルドの場合は`undefined`です。
### `process.windowsStore`
Windows Store App (appx)として動作中の場合は、値は`true`になります。それ以外では`undefined`です。
### `process.defaultApp`
アプリがdefault appのパラメータとして渡されて起動された場合は、値は`true`になります。
訳注: [issue #4690](https://github.com/electron/electron/issues/4690)が参考になります。
## メソッド
`process`オブジェクトは次のメソッドを持ちます。
### `process.crash()`
このプロセスのメインスレッドをクラッシュさせます。
### `process.hang()`
このプロセスのメインスレッドをハングさせます。
### `process.setFdLimit(maxDescriptors)` _macOS_ _Linux_
* `maxDescriptors` Integer
ファイルデスクリプタの最大数のソフトリミットを、`maxDescriptors`かOSのハードリミットの、どちらか低い方に設定します。
### `process.getProcessMemoryInfo()`
本プロセスのメモリ使用統計に関する情報を得ることのできるオブジェクトを返します。全ての報告値はキロバイト単位であることに注意してください。
* `workingSetSize` - 実際の物理メモリに固定されているメモリサイズです。
* `peakWorkingSetSize` - これまでに実際の物理メモリに固定された最大のメモリサイズです。
* `privateBytes` - JS heapやHTML contentなど、他のプロセスに共有されていないメモリサイズです。
* `sharedBytes` - プロセス間で共有されているメモリサイズです。例えばElectronそのものにより使用されたメモリがこれに当たります。
### `process.getSystemMemoryInfo()`
システム全体で使用されているメモリ使用統計に関する情報を得ることのできるオブジェクトを返します。全ての報告値はキロバイト単位であることに注意してください。
* `total` - システムで使用可能な全ての物理メモリのサイズ(KB)です。
* `free` - アプリケーションやディスクキャッシュで使用されていないメモリのサイズです。
Windows / Linux用:
* `swapTotal` - システムで使用可能なスワップメモリの総サイズです。
* `swapFree` - システムで使用可能なスワップメモリの空きサイズです。

View file

@ -1,172 +0,0 @@
# protocol
`protocol`モジュールはカスタムプロトコルを登録したり、または既存のプロトコルをインターセプタ―することができます。
`file://`プロトコルの同様の効果をもつプロトコルを実装した例です。
```javascript
const {app} = require('electron')
const path = require('path')
app.on('ready', function () {
var protocol = electron.protocol
protocol.registerFileProtocol('atom', function (request, callback) {
var url = request.url.substr(7)
callback({path: path.join(__dirname, url)})
}, function (error) {
if (error) console.error('Failed to register protocol')
})
})
```
**Note:** このモジュールは、`app`モジュールで`ready`イベントが出力された後のみ使うことができます。
## メソッド
`protocol`モジュールは、次のメソッドを持ちます。
### `protocol.registerStandardSchemes(schemes)`
* `schemes` Array - 標準的なスキーマーを登録するためのカスタムスキーマー
標準的な`scheme`は、RFC 3986で策定している[generic URI syntax](https://tools.ietf.org/html/rfc3986#section-3)に準拠しています。これには`file:` と `filesystem:`を含んでいます。
### `protocol.registerServiceWorkerSchemes(schemes)`
* `schemes` Array - サービスワーカーをハンドルするために登録されたカスタムスキーマー
### `protocol.registerFileProtocol(scheme, handler[, completion])`
* `scheme` String
* `handler` Function
* `completion` Function (optional)
レスポンスとしてファイルを送信する`scheme`のプロトコルを登録します。`scheme`で`request`が生成された時、`handler`は`handler(request, callback)`で呼び出されます。`scheme` 登録が成功したり、`completion(error)`が失敗したときに、`completion` は`completion(null)`で呼び出されます。
* `request` Object
* `url` String
* `referrer` String
* `method` String
* `uploadData` Array (オプション)
* `callback` Function
`uploadData``data` オブジェクトの配列です:
* `data` Object
* `bytes` Buffer - 送信するコンテンツ
* `file` String - アップロードするファイルパス
`request`をハンドルするために、`callback`はファイルパスまたは`path`プロパティを持つオブジェクトで呼び出すべきです。例えば、`callback(filePath)` または`callback({path: filePath})`です。
何もなし、数字、`error`プロパティを持つオブジェクトで、`callback`が呼び出された時、 `request`は指定した`error`番号で失敗します。使用できる提供されているエラー番号は、[net error list][net-error]を参照してください。
既定では、`scheme`は、`file:`のような一般的なURIの構文に続くプロトコルと違う解析がされ、`http:`のように扱われます。なので、恐らく標準的なスキーマーのように扱われるスキーマーを持つために、`protocol.registerStandardSchemes` を呼び出したくなります。
### `protocol.registerBufferProtocol(scheme, handler[, completion])`
* `scheme` String
* `handler` Function
* `completion` Function (optional)
レスポンスとして`Buffer`を送信する`scheme`プロトコルを登録します。
`callback`は、`Buffer`オブジェクトまたは、`data`と`mimeType`、 `charset`プロパティを持つオブジェクトのどちらかで呼ばれる必要があることを除いて、この使用方法は、`registerFileProtocol`と同じです。
例:
```javascript
protocol.registerBufferProtocol('atom', function (request, callback) {
callback({mimeType: 'text/html', data: Buffer.from('<h5>Response</h5>')})
}, function (error) {
if (error) console.error('Failed to register protocol')
})
```
### `protocol.registerStringProtocol(scheme, handler[, completion])`
* `scheme` String
* `handler` Function
* `completion` Function (optional)
レスポンスとして`String`を送信する`scheme`プロトコルを登録します。
`callback`は、`String`または`data`と `mimeType`、`chart`プロパティを持つオブジェクトを呼び出す必要があることを除いて、使用方法は`registerFileProtocol`と同じです。
### `protocol.registerHttpProtocol(scheme, handler[, completion])`
* `scheme` String
* `handler` Function
* `completion` Function (optional)
レスポンスとしてHTTPリクエストを送信する`scheme`プロトコルを登録します。
`callback`は、`url`と`method`、`referrer`、`uploadData`、`session`プロパティを持つオブジェクトを呼び出す必要があることを除いて、使用方法は`registerFileProtocol`と同じです。
* `redirectRequest` Object
* `url` String
* `method` String
* `session` Object (オプション)
* `uploadData` Object (オプション)
既定では、HTTPリクエストは現在のセッションを再利用します。別のセッションでリクエストをしたい場合、`session` に `null`を設定する必要があります。
POSTリクエストは`uploadData`オブジェクトを提供する必要があります。
* `uploadData` object
* `contentType` String - コンテンツのMIMEタイプ
* `data` String - 送信されるコンテンツ
### `protocol.unregisterProtocol(scheme[, completion])`
* `scheme` String
* `completion` Function (optional)
`scheme`のカスタムプロトコルを解除します。
### `protocol.isProtocolHandled(scheme, callback)`
* `scheme` String
* `callback` Function
`scheme`のハンドラーがあるかないかを示すブーリアン値で`callback`がコールされます。
### `protocol.interceptFileProtocol(scheme, handler[, completion])`
* `scheme` String
* `handler` Function
* `completion` Function (optional)
`scheme`プロトコルをインターセプタ―し、レスポンスとしてファイルを送信するプロトコルの新しいハンドラーとして`handler`を使います。
### `protocol.interceptStringProtocol(scheme, handler[, completion])`
* `scheme` String
* `handler` Function
* `completion` Function (optional)
`scheme`プロトコルをインターセプタ―し、レスポンスとして`String`を送信するプロトコルの新しいハンドラーとして`handler`を使います。
### `protocol.interceptBufferProtocol(scheme, handler[, completion])`
* `scheme` String
* `handler` Function
* `completion` Function (optional)
`scheme`プロトコルをインターセプタ―し、レスポンスとして`Buffer`を送信するプロトコルの新しいハンドラーとして`handler`を使います。
### `protocol.interceptHttpProtocol(scheme, handler[, completion])`
* `scheme` String
* `handler` Function
* `completion` Function (optional)
`scheme`プロトコルをインターセプタ―し、レスポンスとして新しいHTTPリクエストを送信するプロトコルの新しいハンドラーとして`handler`を使います。
### `protocol.uninterceptProtocol(scheme[, completion])`
* `scheme` String
* `completion` Function
インターセプタ―したインストールされた`scheme`を削除し、オリジナルハンドラーをリストアします。
[net-error]: https://code.google.com/p/chromium/codesearch#chromium/src/net/base/net_error_list.h

View file

@ -1,124 +0,0 @@
# remote
`remote`モジュールは、レンダラープロセスウェブページとメインプロセス間でインタープロセスコミュニケーションIPCをする簡単な方法を提供します。
Electronでは、GUI関連モジュール`dialog`や`menu`など)はメインプロセスのみに提供されており、レンダラープロセスには提供されていません。レンダラープロセスからそれらを使うために、`ipc`モジュールはメインプロセスにインタープロセスメッセージを送信するのに必要です。`remote`モジュールで、Javaの[RMI][rmi]と同じように、はっきりとインタープロセスメッセージを送信しなくてもメインプロセスオブジェクトのメソッドを呼び出せます。
レンダラープロセスからブラウザーウィンドウを作成する例:
```javascript
const remote = require('electron').remote
const BrowserWindow = remote.BrowserWindow
var win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL('https://github.com')
```
**Note:** 逆には(メインプロセスからレンダラープロセスにアクセスする)、[webContents.executeJavascript](web-contents.md#webcontentsexecutejavascriptcode-usergesture)が使えます。
## Remote オブジェクト
`remote`モジュールから返されるそれぞれのオブジェクト(関数含む)はメインプロセスでオブジェクトを示します(リモートオブジェクトまたはリモート関数と呼ばれます)。リモートプロジェクトのメソッドを実行したり、リモート関数をコールしたり、リモートコンストラクター(関数)で新しいオブジェクトを生成したりしたとき、実際に非同期にインタープロセスメッセージが送信されます。
上の例では、`BrowserWindow` と `win` はリモートオブジェクトで、`new BrowserWindow`はレンダラープロセスで `BrowserWindow`を作成しません。代わりに、メインプロセスで`BrowserWindow` オブジェクトが作成され、レンダラープロセスで対応するリモートオブジェクトを返し、すなわち`win`オブジェクトです。
リモート経由でのみアクセスできる [enumerable properties](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties)に注意してください。
## Remote オブジェクトのライフタイム
Electronは、レンダラープロセスのリモートオブジェクトが生きている限り言い換えれば、ガベージコレクションされません、対応するメインプロセスのオブジェクトは解放されないことを確認してください。リモートオブジェクトがガベージコレクションされたとき、対応するメインプロセスのオブジェクトが間接参照されます。
レンダラープロセスでリモートオブジェクトがリークした場合(マップに格納されているが解放されない)、メインプロセスで対応するオブジェクトもリークするので、リモートオブジェクトがリークしないように細心の注意を払うべきです。
文字列や数字のようなプライマリ値は、コピーして送信します。
## メインプロセスにコールバックを通す
メインプロセスのコードは、レンダラーからコールバックを受け取ることができます。例えば、`remote`モジュールです。この機能をとても慎重に使うべきです。
最初に、デッドロックを避けるために、メインプロセスに渡されたコールバックは非同期に呼び出されます。メインプロセスは、渡されたコールバックの戻り値を取得することを期待すべきではありません。
例えば、メインプロセスでコールされた`Array.map`で、レンダラープロセスから関数を使用することはできません。:
```javascript
// main process mapNumbers.js
exports.withRendererCallback = function (mapper) {
return [1, 2, 3].map(mapper)
}
exports.withLocalCallback = function () {
return exports.mapNumbers(function (x) {
return x + 1
})
}
```
```javascript
// renderer process
var mapNumbers = require('remote').require('./mapNumbers')
var withRendererCb = mapNumbers.withRendererCallback(function (x) {
return x + 1
})
var withLocalCb = mapNumbers.withLocalCallback()
console.log(withRendererCb, withLocalCb) // [true, true, true], [2, 3, 4]
```
見ることができるように、レンダラーコールバックの同期戻り値は予想されなかったとして、メインプロセスで生きている同一のコールバックの戻り値と一致しません。
第二に、メインプロセスに渡されるコールバックはメインプロセスがガベージコレクトするまで存続します。
例えば、次のコードは一目で無害なコードのように思えます。リモートオブジェクト上で`close`イベントのコールバックをインストールしています。
```javascript
remote.getCurrentWindow().on('close', function () {
// blabla...
})
```
りかし、明確にアンインストールするまでメインプロセスによってコールバックは参照されることを覚えておいてください。アンインストールしない場合、ウィンドウをリロードするたびに、コールバックは再度インストールされ、それぞれの再起動時にコールバックあリークします。
さらに悪いことに、前にインストールされたコールバックのコンテキストは解放されるので、`close`イベントを出力されると、メインプロセスで例外が発生します。
この問題を避けるために、メインプロセスに渡されたレンダラーコールバックへの参照をクリーンアップを確認します。これにはイベントハンドラーのクリンアップも含まれ、存在しているレンダラープロセスから来るコールバックを確実にメインプロセスが守るように確認します。
## メインプロセスで組み込みモジュールにアクセスする
メインプロセスの組み込みモジュールは、`remote`モジュールでゲッターとして追加されるので、`electron`モジュールのように直接それらを使用できます。
```javascript
const app = remote.app
```
## メソッド
`remote`モジュールは次のメソッドを持ちます。
### `remote.require(module)`
* `module` String
メインプロセスで、`require(module)`で返されるオブジェクトを返します。
### `remote.getCurrentWindow()`
このウェブページに属する[`BrowserWindow`](browser-window.md) オブジェクトを返します。
### `remote.getCurrentWebContents()`
このウェブページの[`WebContents`](web-contents.md) オブジェクトを返します。
### `remote.getGlobal(name)`
* `name` String
メインプロセスで、`name`のグローバル変数(例えば、`global[name]`)を返します。
### `remote.process`
メインプロセスで`process`オブジェクトを返します。これは`remote.getGlobal('process')`と同様ですが、キャッシュされます。
[rmi]: http://en.wikipedia.org/wiki/Java_remote_method_invocation

View file

@ -1,131 +0,0 @@
# screen
`screen`モジュールは、画面サイズ、ディスプレイ、カーソル位置などの情報を読み取ります。`app`モジュールの`ready`イベントが出力されるまで、このモジュールは使うべきではありません。
`screen`は [EventEmitter](http://nodejs.org/api/events.html#events_class_events_eventemitter)です。
**Note:** レンダラ―/デベロッパーツールで、`window.screen`はDOMプロパティで予約されているので、`var screen = require('electron').screen`と書いても動作しません。下の例では、代わりに変数名で`electronScreen`を使用しています。
画面全体にウィンドウを作成する例:
```javascript
const electron = require('electron')
const app = electron.app
const BrowserWindow = electron.BrowserWindow
var mainWindow
app.on('ready', function () {
var electronScreen = electron.screen
var size = electronScreen.getPrimaryDisplay().workAreaSize
mainWindow = new BrowserWindow({ width: size.width, height: size.height })
})
```
外部ディスプレイにウィンドウを作成する別の例:
```javascript
const electron = require('electron')
const app = electron.app
const BrowserWindow = electron.BrowserWindow
var mainWindow
app.on('ready', function () {
var electronScreen = electron.screen
var displays = electronScreen.getAllDisplays()
var externalDisplay = null
for (var i in displays) {
if (displays[i].bounds.x !== 0 || displays[i].bounds.y !== 0) {
externalDisplay = displays[i]
break
}
}
if (externalDisplay) {
mainWindow = new BrowserWindow({
x: externalDisplay.bounds.x + 50,
y: externalDisplay.bounds.y + 50
})
}
})
```
## `Display` オブジェクト
`Display`オブジェクトはシステムに接続された物理ディスプレイを示します。ヘッドレスシステムでは、擬似`Display`があるかもしれませんし、`Display`はリモートや仮想ディスプレイに相当するかもしれません。
* `display` object
* `id` Integer - ディスプレイに紐づいた一意な識別子です。
* `rotation` Integer - 0, 1, 2, 3を設定でき、それぞれは時計回りで、0, 90, 180, 270度の画面の回転を示します。
* `scaleFactor` Number - 出力装置のピクセルスケールファクター
* `touchSupport` String - `available`, `unavailable`, `unknown`を設定できます。
* `bounds` Object
* `size` Object
* `workArea` Object
* `workAreaSize` Object
## イベント
`screen`モジュールは次のイベントを出力します:
### イベント: 'display-added'
返り値:
* `event` Event
* `newDisplay` Object
`newDisplay`が追加されたときに出力されます。
### イベント: 'display-removed'
返り値:
* `event` Event
* `oldDisplay` Object
`oldDisplay`が削除されたときに出力されます。
### イベント: 'display-metrics-changed'
返り値:
* `event` Event
* `display` Object
* `changedMetrics` Array
`display`で1つ以上のメトリックが変わったときに出力されます。`changedMetrics`は変更を説明する文字列の配列です。変更内容には`bounds`と`workArea`, `scaleFactor``rotation`があり得ます。
## メソッド
`screen`モジュールは次のメソッドを持ちます:
### `screen.getCursorScreenPoint()`
現在のマウスの絶対位置を返します。
### `screen.getPrimaryDisplay()`
プライマリディスプレイを返します。
### `screen.getAllDisplays()`
現在利用可能なディスプレイの配列を返します。
### `screen.getDisplayNearestPoint(point)`
* `point` Object
* `x` Integer
* `y` Integer
指定したポイントに近いディスプレイを返します。
### `screen.getDisplayMatching(rect)`
* `rect` Object
* `x` Integer
* `y` Integer
* `width` Integer
* `height` Integer
提供された範囲と、もっとも重複しているディスプレイを返します。

View file

@ -1,443 +0,0 @@
# session
`session`モジュールは、新しい`Session`オブジェクトを作成するのに使われます。
[`BrowserWindow`](browser-window.md)のプロパティである [`webContents`](web-contents.md)プロパティの`session`を使うことで既存ページの `session`にアクセスできます。
```javascript
const BrowserWindow = require('electron').BrowserWindow
var win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL('http://github.com')
var ses = win.webContents.session
```
## メソッド
`session`メソッドは次のメソッドを持ちます:
### session.fromPartition(partition)
* `partition` String
`partition`文字列から新しい`Session`インスタンスを返します。
`partition`が`persist:`から始まっている場合、同じ`partition`のアプリ内のすべてのページに永続セッションを提供するのにページが使います。`persist:`プレフィックスが無い場合、ページはインメモリセッションを使います。`partition`が空の場合、アプリの既定のセッションを返します。
## プロパティ
`session`モジュールは次のプロパティを持ちます:
### session.defaultSession
アプリの既定のセッションオブジェクトを返します。
## クラス: Session
`session`モジュールで、`Session`オブジェクトを作成できます:
```javascript
const session = require('electron').session
var ses = session.fromPartition('persist:name')
```
### インスタンスイベント
`Session`のインスタンス上で次のイベントが提供されます:
#### イベント: 'will-download'
* `event` Event
* `item` [DownloadItem](download-item.md)
* `webContents` [WebContents](web-contents.md)
Electronが`webContents`で`item`をダウンロードしようとすると出力されます。
`event.preventDefault()` をコールするとダウンロードをキャンセルできます。
```javascript
session.defaultSession.on('will-download', function (event, item, webContents) {
event.preventDefault()
require('request')(item.getURL(), function (data) {
require('fs').writeFileSync('/somewhere', data)
})
})
```
### インスタンスのメソッド
`Session`のインスタンス上で次のメソッドが提供されています:
#### `ses.cookies`
`cookies`は、cookiesに問い合わせしたり、修正をできるようにします。例
```javascript
// Query all cookies.
session.defaultSession.cookies.get({}, function (error, cookies) {
if (error) console.error(error)
console.log(cookies)
})
// Query all cookies associated with a specific url.
session.defaultSession.cookies.get({ url: 'http://www.github.com' }, function (error, cookies) {
if (error) console.error(error)
console.log(cookies)
})
// Set a cookie with the given cookie data;
// may overwrite equivalent cookies if they exist.
var cookie = { url: 'http://www.github.com', name: 'dummy_name', value: 'dummy' }
session.defaultSession.cookies.set(cookie, function (error) {
if (error) console.error(error)
})
```
#### `ses.cookies.get(filter, callback)`
* `filter` Object
* `url` String (オプション) - `url`に関連付けられているcookiesを取得します。空の場合すべてのurlのcookiesを取得します
* `name` String (オプション) - `name`でcookiesをフィルタリングします
* `domain` String (オプション) - `domains`のドメインまたはサブドメインに一致するcookiesを取得します
* `path` String (オプション) - `path`に一致するパスのcookiesを取得します
* `secure` Boolean (オプション) - Secure プロパティでcookiesをフィルターします
* `session` Boolean (オプション) - Filters out `session`または永続cookiesを除外します
* `callback` Function
`details`に一致するすべてのcookiesを取得するためにリクエストを送信し、完了時に`callback(error, cookies)`で`callback`がコールされます。
`cookies` は`cookie`オブジェクトの配列です。
* `cookie` Object
* `name` String - cookieの名前
* `value` String - cookieの値
* `domain` String - cookieのドメイン
* `hostOnly` String - cookieがホストのみのcookieかどうか
* `path` String - cookieのパス
* `secure` Boolean - cookieがセキュアとマークされているかどうか
* `httpOnly` Boolean - HTTPのみとしてcookieがマークされているかどうか
* `session` Boolean - cookieがセッションcookieまたは有効期限付きの永続cookieかどうか
* `expirationDate` Double (オプション) -
cookieの有効期限をUNIX時間で何秒かを示します。セッションcookiesは提供されません。
#### `ses.cookies.set(details, callback)`
* `details` Object
* `url` String - `url`に関連付けられているcookiesを取得します。
* `name` String - cookieの名前。省略した場合、既定では空です。
* `value` String - cookieの名前。省略した場合、既定では空です。
* `domain` String - cookieのドメイン。省略した場合、既定では空です。
* `path` String - cookieのパス。 省略した場合、既定では空です。
* `secure` Boolean - cookieをセキュアとしてマークする必要があるかどうか。既定ではfalseです。
* `session` Boolean - cookieをHTTPのみとしてマークする必要があるかどうか。既定ではfalseです。
* `expirationDate` Double - cookieの有効期限をUNIX時間で何秒か。省略した場合、cookieはセッションcookieになります。
* `callback` Function
`details`でcookieを設定し、完了すると`callback(error)`で`callback`がコールされます。
#### `ses.cookies.remove(url, name, callback)`
* `url` String - cookieに関連付けられているURL
* `name` String - 削除するcookieの名前
* `callback` Function
`url``name`と一致するcookiesを削除し、完了すると`callback`が、`callback()`でコールされます。
#### `ses.getCacheSize(callback)`
* `callback` Function
* `size` Integer - 使用しているキャッシュサイズバイト数
現在のセッションのキャッシュサイズを返します。
#### `ses.clearCache(callback)`
* `callback` Function - 操作が完了したら、コールされます。
セッションのHTTPキャッシュをクリアします。
#### `ses.clearStorageData([options, ]callback)`
* `options` Object (オプション)
* `origin` String - `window.location.origin`の説明で、`scheme://host:port`に従う
* `storages` Array - クリアするストレージの種類で、次を含められます:
`appcache``cookies``filesystem``indexdb``local storage`
`shadercache``websql``serviceworkers`
* `quotas` Array - クリアするクォーターの種類で、次を含められます:
`temporary`, `persistent`, `syncable`.
* `callback` Function - 操作をするとコールされます。
ウェブストレージのデータをクリアします。
#### `ses.flushStorageData()`
書き込まれていないDOMStorageデータをディスクに書き込みます。
#### `ses.setProxy(config, callback)`
* `config` Object
* `pacScript` String - PACファイルに関連付けらえたURL
* `proxyRules` String - 使用するプロキシを指定するルール
* `callback` Function - 操作をするとコールされます。
プロキシ設定を設定します。
`pacScript``proxyRules`が一緒に渡されたら、`proxyRules`オプションは無視され、`pacScript`設定が適用されます。
`proxyRules`は次のルールに従います。
```
proxyRules = schemeProxies[";"<schemeProxies>]
schemeProxies = [<urlScheme>"="]<proxyURIList>
urlScheme = "http" | "https" | "ftp" | "socks"
proxyURIList = <proxyURL>[","<proxyURIList>]
proxyURL = [<proxyScheme>"://"]<proxyHost>[":"<proxyPort>]
```
具体例:
* `http=foopy:80;ftp=foopy2` - `http://`URLは`foopy:80`HTTPプロキシを使用し、`ftp://`URLは`foopy2:80` HTTPプロキシを使用します。
* `foopy:80` - 全てのURLで`foopy:80`を使用します。
* `foopy:80,bar,direct://` - 全てのURLで`foopy:80`HTTPプロキシを使用し、`foopy:80`が提供されていなければ`bar`を使用し、さらに使えない場合はプロキシを使いません。
* `socks4://foopy` - 全てのURLでSOCKS `foopy:1080`プロキシを使います。
* `http=foopy,socks5://bar.com` - http URLで`foopy`HTTPプロキシを使い、`foopy`が提供されていなければ、SOCKS5 proxy `bar.com`を使います。
* `http=foopy,direct://` -  http URLで`foopy`HTTPプロキシを使い、`foopy`が提供されていなければ、プロキシを使いません。
* `http=foopy;socks=foopy2` - http URLで`foopy`HTTPプロキシを使い、それ以外のすべてのURLで`socks4://foopy2`を使います。
### `ses.resolveProxy(url, callback)`
* `url` URL
* `callback` Function
`url`をプロキシ情報で解決します。リクエストが実行された時、`callback(proxy)`で `callback`がコールされます。
#### `ses.setDownloadPath(path)`
* `path` String - ダウンロード場所
ダウンロードの保存ディレクトリを設定します。既定では、ダウンロードディレクトリは、個別のアプリフォルダー下の`Downloads`です。
#### `ses.enableNetworkEmulation(options)`
* `options` Object
* `offline` Boolean - ネットワーク停止を再現するかどうか
* `latency` Double - RTT ms秒
* `downloadThroughput` Double - Bpsでのダウンロード割合
* `uploadThroughput` Double - Bpsでのアップロード割合
再現ネットワークは、`session`用の設定を付与します。
```javascript
// To emulate a GPRS connection with 50kbps throughput and 500 ms latency.
window.webContents.session.enableNetworkEmulation({
latency: 500,
downloadThroughput: 6400,
uploadThroughput: 6400
})
// To emulate a network outage.
window.webContents.session.enableNetworkEmulation({offline: true})
```
#### `ses.disableNetworkEmulation()`
`session`ですでに有効になっているネットワークエミュレーションを無効化します。オリジナルのネットワーク設定にリセットします。
#### `ses.setCertificateVerifyProc(proc)`
* `proc` Function
`session`の証明書検証ロジックを設定し、サーバー証明書確認がリクエストされた時、`proc(hostname, certificate, callback)`で`proc`がコールされます。`callback(true)`がコールされると証明書を受け入れ、`callback(false)`がコールされると拒否します。
Calling `setCertificateVerifyProc(null)`をコールして、既定の証明書検証ロジックに戻します。
```javascript
myWindow.webContents.session.setCertificateVerifyProc(function (hostname, cert, callback) {
callback(hostname === 'github.com')
})
```
#### `ses.webRequest`
`webRequest`APIセットをインターセプトし、そのライフタイムの様々な段階でリクエストの内容を変更できます。
APIのイベントが発生したとき、それぞれのAPIはオプションで`filter`と `listener`を受け入れ、`listener(details)` で`listener`がコールされ、`details`はリクエストを説明するオブジェクトです。`listener`に`null`が渡されるとイベントの購読をやめます。
`filter`は`urls`プロパティを持つオブジェクトで、URLパターンにマッチしないリクエストを除外するのに使われるURLパターンの配列です。`filter`を省略した場合、全てのリクエストにマッチします。
いくつかのイベントで`callback`で`listener`に渡され、`listener`が動作するとき、`response`オブジェクトでコールされる必要があります。
```javascript
// Modify the user agent for all requests to the following urls.
var filter = {
urls: ['https://*.github.com/*', '*://electron.github.io']
}
session.defaultSession.webRequest.onBeforeSendHeaders(filter, function (details, callback) {
details.requestHeaders['User-Agent'] = 'MyAgent'
callback({cancel: false, requestHeaders: details.requestHeaders})
})
```
#### `ses.webRequest.onBeforeRequest([filter, ]listener)`
* `filter` Object
* `listener` Function
リクエストが発生しようとしている時、`listener(details, callback)`で`listener` がコールされます。
* `details` Object
* `id` Integer
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `uploadData` Array (オプション)
* `callback` Function
`uploadData``data`オブジェクトの配列です。
* `data` Object
* `bytes` Buffer - 送信されるコンテンツ
* `file` String - アップロードされるファイルパス
`callback`は`response`オブジェクトでコールされる必要があります:
* `response` Object
* `cancel` Boolean (オプション)
* `redirectURL` String (オプション) - オリジナルリクエストが送信もしくは完了するのを中断し、代わりに付与したURLにリダイレクトします。
#### `ses.webRequest.onBeforeSendHeaders([filter, ]listener)`
* `filter` Object
* `listener` Function
リクエストヘッダーが提供されれば、HTTPリクエストが送信される前に、`listener(details, callback)`で`listener`がコールされます。TCP接続がサーバーに対して行われた後に発生することがありますが、HTTPデータは送信前です。
* `details` Object
* `id` Integer
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `requestHeaders` Object
* `callback` Function
The `callback` has to be called with an `response` object:
* `response` Object
* `cancel` Boolean (オプション)
* `requestHeaders` Object (オプション) - 付与されると、リクエストはそれらのヘッダーで作成されます。
#### `ses.webRequest.onSendHeaders([filter, ]listener)`
* `filter` Object
* `listener` Function
サーバーにリクエストを送信しようする直前に`listener(details)`で、`listener` がコールされます。前回の`onBeforeSendHeaders`レスポンスの変更箇所は、このリスナーが起動した時点で表示されます。
* `details` Object
* `id` Integer
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `requestHeaders` Object
#### `ses.webRequest.onHeadersReceived([filter,] listener)`
* `filter` Object
* `listener` Function
リクエストのHTTPレスポンスヘッダーを受信したとき、`listener`は`listener(details, callback)`でコールされます。
* `details` Object
* `id` String
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `statusLine` String
* `statusCode` Integer
* `responseHeaders` Object
* `callback` Function
`callback`は`response`オブジェクトでコールされる必要があります:
* `response` Object
* `cancel` Boolean
* `responseHeaders` Object (オプション) - 付与されていると、これらのヘッダーでサーバーはレスポンスしたと仮定します。
#### `ses.webRequest.onResponseStarted([filter, ]listener)`
* `filter` Object
* `listener` Function
レスポンスボディの最初のバイトを受信したとき、`listener` は`listener(details)` でコールされます。HTTPリクエストでは、ステータス行とレスポンスヘッダーを意味します。
* `details` Object
* `id` Integer
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `responseHeaders` Object
* `fromCache` Boolean -ディスクキャッシュから取得したレスポンスかどうかを示します
* `statusCode` Integer
* `statusLine` String
#### `ses.webRequest.onBeforeRedirect([filter, ]listener)`
* `filter` Object
* `listener` Function
サーバーがリダイレクトを開始しはじめたとき、`listener(details)`で`listener` がコールされます。
* `details` Object
* `id` String
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `redirectURL` String
* `statusCode` Integer
* `ip` String (オプション) - 実際にリクエストが送信されるサーバーIPアドレス
* `fromCache` Boolean
* `responseHeaders` Object
#### `ses.webRequest.onCompleted([filter, ]listener)`
* `filter` Object
* `listener` Function
リクエスト完了時、`listener`が`listener(details)`でコールされます。
* `details` Object
* `id` Integer
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `responseHeaders` Object
* `fromCache` Boolean
* `statusCode` Integer
* `statusLine` String
#### `ses.webRequest.onErrorOccurred([filter, ]listener)`
* `filter` Object
* `listener` Function
エラー発生時、 `listener(details)` で`listener`がコールされます。
* `details` Object
* `id` Integer
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `fromCache` Boolean
* `error` String - エラーの説明

View file

@ -1,43 +0,0 @@
# shell
`shell`モジュールはデスクトップ統合に関係した機能を提供します。
ユーザーのデフォルトのブラウザでURLを開く例です
```javascript
const shell = require('electron').shell
shell.openExternal('https://github.com')
```
## メソッド
`shell`モジュールは次のメソッドを持ちます:
### `shell.showItemInFolder(fullPath)`
* `fullPath` String
ファイルマネジャーでファイルを表示します。もし可能ならファイルを選択します。
### `shell.openItem(fullPath)`
* `fullPath` String
デスクトップの既定のやり方で指定したファイルを開きます。
### `shell.openExternal(url)`
* `url` String
デスクトップの既定のやり方で指定した外部のプロトコルURLで開きます。例えば、mailto:URLでユーザーの既定メールエージェントを開きます
### `shell.moveItemToTrash(fullPath)`
* `fullPath` String
ゴミ箱へ指定したファイルを移動し、操作結果をブーリアン値を返します。
### `shell.beep()`
ビープ音を再生します。

View file

@ -1,65 +0,0 @@
# 概要
> どうやってNode.jsとElectronのAPIを使うか。
Electron では全ての [Node.js のビルトインモジュール](http://nodejs.org/api/) が利用可能です。また、サードパーティの Node モジュール ([ネイティブモジュール](../tutorial/using-native-node-modules.md)も含む) も完全にサポートされています。
Electron はネイティブのデスクトップアプリケーション開発のための幾つかの追加のビルトインモジュールも提供しています。メインプロセスでだけ使えるモジュールもあれば、レンダラプロセス(ウェブページ)でだけ使えるモジュール、あるいはメインプロセス、レンダラプロセスどちらでも使えるモジュールもあります。
基本的なルールは:[GUI][gui]、または低レベルのシステムに関連するモジュールはメインモジュールでだけ利用できるべきです。これらのモジュールを使用できるようにするためには [メインプロセス対レンダラプロセス](../tutorial/quick-start.md#メインプロセス)スクリプトの概念を理解する必要があります。
メインプロセススクリプトは普通の Node.js スクリプトのようなものです:
```javascript
const {app, BrowserWindow} = require('electron')
let win = null
app.on('ready', () => {
win = new BrowserWindow({width: 800, height: 600})
win.loadURL('https://github.com')
})
```
レンダラプロセスは Node モジュールを使うための追加機能を除いて、通常のウェブページとなんら違いはありません:
```html
<!DOCTYPE html>
<html>
<body>
<script>
const {app} = require('electron').remote;
console.log(app.getVersion());
</script>
</body>
</html>
```
アプリケーションを実行については、[アプリを実行する](../tutorial/quick-start.md#アプリを実行する)を参照してください。
## 分割代入
0.37の時点で、[分割代入][desctructuring-assignment]でビルトインモジュールの使用をより簡単にできます:
```javascript
const {app, BrowserWindow} = require('electron')
```
もし`electron`モジュール全体が必要であれば、requireして、それぞれのモジュールを`electron`からアクセスすることができます。
```javascript
const electron = require('electron')
const {app, BrowserWindow} = electron
```
これは、次のコードと同じ意味を持ちます。
```javascript
const electron = require('electron')
const app = electron.app
const BrowserWindow = electron.BrowserWindow
```
[gui]: https://en.wikipedia.org/wiki/Graphical_user_interface
[desctructuring-assignment]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
[issue-387]: https://github.com/electron/electron/issues/387

View file

@ -1,93 +0,0 @@
# systemPreferences
> システムの環境設定を取得します。
```javascript
const {systemPreferences} = require('electron')
console.log(systemPreferences.isDarkMode())
```
## メソッド
### `systemPreferences.isDarkMode()` _macOS_
macOS がダークモードならば `true` を返し、通常モードなら `false` を返します。
### `systemPreferences.subscribeNotification(event, callback)` _macOS_
* `event` String
* `callback` Function
macOS のネイティブな通知を購読します。 `callback``callback(event, userInfo)` として `event` の発生に対応して呼ばれます。`userInfo` は通知によって送られてくるユーザー情報のオブジェクトです。
この関数が返す `id``event`の購読をやめる際に使用します。
内部ではこの API は `NSDistributedNotificationCenter` を購読するので、`event` の例は以下のようなものがあります。
* `AppleInterfaceThemeChangedNotification`
* `AppleAquaColorVariantChanged`
* `AppleColorPreferencesChangedNotification`
* `AppleShowScrollBarsSettingChanged`
### `systemPreferences.unsubscribeNotification(id)` _macOS_
* `id` Integer
`id` の購読をやめます。
### `systemPreferences.subscribeLocalNotification(event, callback)` _macOS_
`subscribeNotification` と同じですが、 `NSNotificationCenter` を購読します。下記のような `event` を捕まえるために必要です。
* `NSUserDefaultsDidChangeNotification`
### `systemPreferences.unsubscribeLocalNotification(id)` _macOS_
`unsubscribeNotification` と同じですが、`NSNotificationCenter` による購読をやめます。
### `systemPreferences.getUserDefault(key, type)` _macOS_
* `key` String
* `type` String - 右記の値を入れられます `string`, `boolean`, `integer`, `float`, `double`,
`url`, `array`, `dictionary`
システム環境設定の `key` の値を取得します。
この API は macOS の `NSUserDefaults` から情報を取得します。よく使われる `key` 及び `type` には下記のものがあります。
* `AppleInterfaceStyle: string`
* `AppleAquaColorVariant: integer`
* `AppleHighlightColor: string`
* `AppleShowScrollBars: string`
* `NSNavRecentPlaces: array`
* `NSPreferredWebServices: dictionary`
* `NSUserDictionaryReplacementItems: array`
### `systemPreferences.isAeroGlassEnabled()` _Windows_
[DWM composition][dwm-composition] (Aero Glass) が有効だと `true` を返し、そうでないと `false` を返します。
使用例として、例えば透過ウィンドウを作成するかしないか決めるときに使います(DWM composition が無効だと透過ウィンドウは正常に動作しません)
```javascript
const {BrowserWindow, systemPreferences} = require('electron')
let browserOptions = {width: 1000, height: 800}
// プラットフォームがサポートしている場合に限り透過ウィンドウを作成します。
if (process.platform !== 'win32' || systemPreferences.isAeroGlassEnabled()) {
browserOptions.transparent = true
browserOptions.frame = false
}
// ウィンドウを作成
let win = new BrowserWindow(browserOptions)
// 分岐
if (browserOptions.transparent) {
win.loadURL(`file://${__dirname}/index.html`)
} else {
// 透過がサポートされてないなら、通常のスタイルの html を表示する
win.loadURL(`file://${__dirname}/fallback.html`)
}
```
[dwm-composition]:https://msdn.microsoft.com/en-us/library/windows/desktop/aa969540.aspx

View file

@ -1,198 +0,0 @@
# Tray
`Tray`は、オペレーティングシステムの通知エリアでアイコンで表示され、通常コンテキストメニューが付随します。
```javascript
const electron = require('electron')
const app = electron.app
const Menu = electron.Menu
const Tray = electron.Tray
var appIcon = null
app.on('ready', function () {
appIcon = new Tray('/path/to/my/icon')
var contextMenu = Menu.buildFromTemplate([
{ label: 'Item1', type: 'radio' },
{ label: 'Item2', type: 'radio' },
{ label: 'Item3', type: 'radio', checked: true },
{ label: 'Item4', type: 'radio' }
])
appIcon.setToolTip('This is my application.')
appIcon.setContextMenu(contextMenu)
})
```
__プラットフォームの制限:__
* Linuxでは、サポートしている場合アプリインディケーターが使われ、サポートされていなければ代わりに`GtkStatusIcon`が使われます。
* アプリインディケーターを持っているLinuxディストリビューションでは、トレイアイコンを動作させるために`libappindicator1`をインストールする必要があります。
* コンテキストメニューがあるときは、インディケーターのみが表示されます。
* アプリインディケーターがLinuxで使われると、`click`イベントは無視されます。
すべてのプラットフォームで正確に同じ挙動を維持したい場合は、`click`イベントに依存せず、常にトレイアイコンにコンテキストメニューを付随させるようにします。
## クラス: Tray
`Tray`は[EventEmitter][event-emitter]です。
### `new Tray(image)`
* `image` [NativeImage](native-image.md)
`image`で新しいトレイアイコンを作成します。
## イベント
`Tray`モジュールは次のイベントを出力します。
**Note:** いくつかのイベントは、特定のオペレーティングシステム向けに提供され、そのようにラベルで表示します。
### イベント: 'click'
* `event` Event
* `altKey` Boolean
* `shiftKey` Boolean
* `ctrlKey` Boolean
* `metaKey` Boolean
* `bounds` Object - トレイアイコンのバウンド
* `x` Integer
* `y` Integer
* `width` Integer
* `height` Integer
トレイアイコンがクリックされたときに出力されます。
__Note:__ `バウンド` 再生はmacOSとWindoesのみで実装されています。
### イベント: 'right-click' _macOS_ _Windows_
* `event` Event
* `altKey` Boolean
* `shiftKey` Boolean
* `ctrlKey` Boolean
* `metaKey` Boolean
* `bounds` Object - トレイアイコンのバウンド
* `x` Integer
* `y` Integer
* `width` Integer
* `height` Integer
トレイアイコンが右クリックされると出力されます。
### イベント: 'double-click' _macOS_ _Windows_
* `event` Event
* `altKey` Boolean
* `shiftKey` Boolean
* `ctrlKey` Boolean
* `metaKey` Boolean
* `bounds` Object - トレイアイコンのバウンド
* `x` Integer
* `y` Integer
* `width` Integer
* `height` Integer
トレイアイコンがダブルクリックされたら出力されます。
### イベント: 'balloon-show' _Windows_
トレイバルーンを表示したときに出力されます。
### イベント: 'balloon-click' _Windows_
トレイバルーンがクリックされたときに出力されます。
### イベント: 'balloon-closed' _Windows_
タイムアウトもしくはユーザーの操作で閉じて、トレイバルーンがクロースされたときに出力されます。
### イベント: 'drop' _macOS_
トレイアイコンでアイテムがドラグアンドドロップされたときに出力されます。
### イベント: 'drop-files' _macOS_
* `event`
* `files` Array - ドロップされたアイテムのフルパス
トレイアイコンでファイルがドロップされたときに出力されます。
### イベント: 'drag-enter' _macOS_
トレイアイコンにドラッグ操作が入ったときに出力されます。
### イベント: 'drag-leave' _macOS_
トレイアイコンででドラッグ操作が行われたときに出力されます。
### イベント: 'drag-end' _macOS_
トレイ上でドラッグ操作が終了したか、ほかの場所で終了したときに出力されます。
## Methods
`Tray`モジュールは次のメソッドを持ちます。
**Note:** いくつかのメソッドは、特定のオペレーティングシステム向けに提供され、そのようにラベルで表示します。
### `Tray.destroy()`
ただちにトレイアイコンを終了します。
### `Tray.setImage(image)`
* `image` [NativeImage](native-image.md)
トレイアイコンの`image`を設定します。
### `Tray.setPressedImage(image)` _macOS_
* `image` [NativeImage](native-image.md)
macOSで押されたときにトレイアイコンの`image`を設定します。
### `Tray.setToolTip(toolTip)`
* `toolTip` String
トレイアイコン用のホバーテキストを設定します。
### `Tray.setTitle(title)` _macOS_
* `title` String
ステータスバーで、トレイアイコンのわきに表示するタイトルを設定します。
### `Tray.setHighlightMode(highlight)` _macOS_
* `highlight` Boolean
トレイアイコンがクリックされた時、トレイアイコンの背景をハイライト青色するかどうかを設定します。既定ではTrueです。
### `Tray.displayBalloon(options)` _Windows_
* `options` Object
* `icon` [NativeImage](native-image.md)
* `title` String
* `content` String
トレイバルーンを表示します。
### `Tray.popUpContextMenu([menu, position])` _macOS_ _Windows_
* `menu` Menu (optional)
* `position` Object (optional) - ポップアップ位置
* `x` Integer
* `y` Integer
トレイアイコンのコンテキストメニューをポップアップします。`menu`が渡されたとき、`menu`はトレイコンテキストメニューの代わりに表示されます。
`position`はWindowsのみで提供され、既定では(0, 0) です。
### `Tray.setContextMenu(menu)`
* `menu` Menu
アイコン用のコンテキストメニューを設定します。
[event-emitter]: http://nodejs.org/api/events.html#events_class_events_eventemitter

View file

@ -1,100 +0,0 @@
# webFrame
`web-frame`モジュールは現在のウェブページンのレンダリングのカスタマイズをできるようにします。
現在のページの倍率を200%にする例です。
```javascript
var webFrame = require('electron').webFrame
webFrame.setZoomFactor(2)
```
## メソッド
`web-frame`モジュールは次のメソッドを持ちます:
### `webFrame.setZoomFactor(factor)`
* `factor` Number - 拡大倍数
指定した倍数に拡大倍数を変更します。拡大倍数は、拡大率を100で割った数字なので、300%だと3.0です。
### `webFrame.getZoomFactor()`
現在の拡大倍数を返します。
### `webFrame.setZoomLevel(level)`
* `level` Number - 拡大レベル
指定したレベルに拡大レベルを変更します。オリジナルサイズは0で、1 つ上下させると20%拡大か縮小になり、既定の制限ではオリジナルサイズの300%と50%です。
### `webFrame.getZoomLevel()`
返事あの拡大レベルを返します。
### `webFrame.setZoomLevelLimits(minimumLevel, maximumLevel)`
* `minimumLevel` Number
* `maximumLevel` Number
最大と最小の拡大レベルを設定します。
### `webFrame.setSpellCheckProvider(language, autoCorrectWord, provider)`
* `language` String
* `autoCorrectWord` Boolean
* `provider` Object
inputフィールドやtextエリアでスペルチェックの提供を設定します。
`provider`は、単語が正しいスペルかどうかを返す`spellCheck`メソッドを持つオブジェクトでなければなりません。
プロバイダーとして[node-spellchecker][spellchecker]を使用する例です:
```javascript
webFrame.setSpellCheckProvider('en-US', true, {
spellCheck: function (text) {
return !(require('spellchecker').isMisspelled(text))
}
})
```
### `webFrame.registerURLSchemeAsSecure(scheme)`
* `scheme` String
セキュアなスキーマーとして`scheme`を登録します。
セキュアなスキーマーは、今テンスの混在警告をトリガーしません。例えば、アクティブなネットワーク攻撃では破壊できないので`https`と`data`はセキュアなスキーマーです。
### `webFrame.registerURLSchemeAsBypassingCSP(scheme)`
* `scheme` String
リソースは現在のページのコンテンツセキュリティポリシーにかかわらず `scheme`からロードします。
### `webFrame.registerURLSchemeAsPrivileged(scheme)`
* `scheme` String
セキュアとして`scheme`を登録し、リソースの今テンスセキュリティポリシーを回避して、ServiceWorkerの登録とAPIのフェッチをサポートします。
### `webFrame.insertText(text)`
* `text` String
フォーカスが当たっているエレメントに`text`を挿入します。
### `webFrame.executeJavaScript(code[, userGesture])`
* `code` String
* `userGesture` Boolean (オプション) - 既定では`false`です。
ページで`code`を評価します。
ブラウザウィンドウで、 `requestFullScreen`のようないくつかのHTML APIは、ユーザージェスチャーによってのみ起動できます。`userGesture`を`true` に設定すると、この制限は削除されます。
[spellchecker]: https://github.com/atom/node-spellchecker

View file

@ -1,744 +0,0 @@
# `<webview>` タグ
> 外部ウェブコンテンツを別のプロセスとフレームで表示します。
Electronアプリ内でウェブページのような外部コンテンツを埋め込む際は、`webview`タグを使用してください。外部コンテンツは`webview`コンテナ内に閉じ込められます。
アプリケーションの埋め込みページは、外部コンテンツがどのように表示されるかを制御することができます。
`iframe`と違い、`webview`はあなたのアプリと別のプロセスで動作します。あなたのウェブページとは違う実行許可レベルを持っており、あなたのアプリと埋め込みコンテンツの間のデータのやり取りは非同期で行われます。これにより、あなたのアプリケーションは埋め込みコンテンツからの安全が確保されます。
セキュリティ的な理由で、`webview`は`nodeIntegration`が有効な`BrowserWindow`でしか使用できません。
## 例
ウェブページをあなたのアプリに埋め込むには、`webview`タグをあなたの埋め込みページ(外部コンテンツを表示するアプリのページ)に追加してください。
もっとも単純な方法では、`webview`タグはウェブページの`src`と、見た目を制御する`style`を持っています。
```html
<webview id="foo" src="https://www.github.com/" style="display:inline-flex; width:640px; height:480px"></webview>
```
もし、外部コンテンツを制御したい場合、`webview`イベントを受け取り、`webview`メソッドでそれらのイベントに返答するJavaScriptコードを書くことになります。
下記にあるのはウェブページの読み込みが開始した時と、止まった時にイベントを受け取るサンプルで、読み込み中に"loading..."というメッセージを表示します。
```html
<script>
onload = () => {
const webview = document.getElementById('foo');
const indicator = document.querySelector('.indicator');
const loadstart = () => {
indicator.innerText = 'loading...';
};
const loadstop = () => {
indicator.innerText = '';
};
webview.addEventListener('did-start-loading', loadstart);
webview.addEventListener('did-stop-loading', loadstop);
};
</script>
```
## CSS Styling Notes
もし、flexbox layouts(v.0.36.11以降)を使用する場合は、`webview`タグは子`object`要素が`webview`自体の高さと幅いっぱいとなるよう、内部で`display: flex;`を使用しているのに注意してください。
インラインレイアウトとしたい時に`display: inline-flex;`を指定する以外には、この`display: flex;`は上書きしないでください。
`webview`は`hidden`属性か、`display: none;`と使用して非表示にする際に、いくつか問題があります。
`browserplugin`オブジェクトの中での描画や、ウェブページを再度表示するために再読み込みした際などに通常とは異なる描画となる場合があります。
`webview`を隠すオススメの方法としては、`width`と`height`をゼロに設定し、`flex`を通じて、0pxまで小さくできるようにします。
```html
<style>
webview {
display:inline-flex;
width:640px;
height:480px;
}
webview.hide {
flex: 0 1;
width: 0px;
height: 0px;
}
</style>
```
## Tag 属性
`webview`タグは下記のような属性を持っています:
### `src`
```html
<webview src="https://www.github.com/"></webview>
```
表示されているURLを返します。本属性への書き込みは、トップレベルナビゲーションを開始させます。
`src`の値を現在の値に再度設定することで、現在のページを再読み込みさせることができます。
また、`src`属性はdata URLを指定することができます(例: `data:text/plain,Hello, world!`)。
### `autosize`
```html
<webview src="https://www.github.com/" autosize="on" minwidth="576" minheight="432"></webview>
```
"on"の際は、`minwidth`, `minheight`, `maxwidth`, `maxheight`で設定された範囲内で、自動的に大きさが変化します。
これらの制限値は、`autosize`が有効でない場合は影響しません。
`autosize`が有効の際は、`webview`コンテナサイズは指定した最小値より小さくなりませんし、最大値より大きくなりません。
### `nodeintegration`
```html
<webview src="http://www.google.com/" nodeintegration></webview>
```
"on"の際は、`webview`内のゲストページ(外部コンテンツ)でnode integrationが有効となり、`require`や`process`と行ったnode APIでシステムリソースにアクセスできるようになります。1
**注意:** 親ウィンドウでnode integrationが無効の場合は、`webview`でも常に無効になります。
### `plugins`
```html
<webview src="https://www.github.com/" plugins></webview>
```
"on"の際は、ゲストページはブラウザプラグインを使用できます。
### `preload`
```html
<webview src="https://www.github.com/" preload="./test.js"></webview>
```
ゲストページ上のスクリプトより先に実行されるスクリプトを指定してください。内部では、ゲストページ内で`require`で読み込まれるので、スクリプトのURLのプロトコルはは`file:`または`asar:`でなければなりません。
ゲストページがnode integrationが無効の場合でも、このスクリプトは全てのNode APIにアクセスできます。ただし、グローバルオブジェクトはこのスクリプトの実行終了後にすべて削除されます。
### `httpreferrer`
```html
<webview src="https://www.github.com/" httpreferrer="http://cheng.guru"></webview>
```
ゲストページのためにリファラを設定します。
### `useragent`
```html
<webview src="https://www.github.com/" useragent="Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko"></webview>
```
ページ遷移の前に、User agentを指定します。すでにページが読み込まれている場合は、`setUserAgent`メソッドを利用して変更してください。
### `disablewebsecurity`
```html
<webview src="https://www.github.com/" disablewebsecurity></webview>
```
"on"の際は、ゲストページのウェブセキュリティは無効となります。
### `partition`
```html
<webview src="https://github.com" partition="persist:github"></webview>
<webview src="https://electron.atom.io" partition="electron"></webview>
```
ページで使用されるセッションを設定します。もし、`partition`が`persist:`から始まる場合、アプリ上の同じ`partition`を指定した全てのページで有効な永続セッションを使用します。
`persist:`接頭辞なしで指定した場合、メモリ内セッションを使用します。同じセッションを指定すると複数のページで同じセッションを使用できます。
`partition`を設定しない場合は、アプリケーションのデフォルトセッションが使用されます。
レンダラプロセスのセッションは変更できないため、この値は最初のページ遷移の前に変更されないといけません。
その後に変更をしようとしても、DOM例外を起こすことになります。
### `allowpopups`
```html
<webview src="https://www.github.com/" allowpopups></webview>
```
"on"の場合、ゲストページは新しいウィンドウを開くことができます。
### `blinkfeatures`
```html
<webview src="https://www.github.com/" blinkfeatures="PreciseMemoryInfo, CSSVariables"></webview>
```
有効にしたいblink featureを`,`で区切って指定します。
サポートされている全ての機能は、[setFeatureEnabledFromString][blink-feature-string]にリストがあります。
## メソッド
`webview`タグは、下記のようなメソッドを持っています:
**注意:** webview要素はメソッドを使用する前に読み込まれていないといけません。
**例**
```javascript
webview.addEventListener('dom-ready', () => {
webview.openDevTools()
})
```
### `<webview>.loadURL(url[, options])`
* `url` URL
* `options` Object (optional)
* `httpReferrer` String - リファラURL
* `userAgent` String - リクエストに使用されるUser agent
* `extraHeaders` String - 追加のヘッダを"\n"で区切って指定します。
`url`をwebviewで読み込みます。`url`はプロトコル接頭辞(`http://`や`file://`など)を含んでいなければいけません。
### `<webview>.getURL()`
ゲストページのURLを取得します。
### `<webview>.getTitle()`
ゲストページのタイトルを返します。
### `<webview>.isLoading()`
ゲストページが読み込み中かのbool値を返します。
### `<webview>.isWaitingForResponse()`
ゲストページがページの最初の返答を待っているかのbool値を返します。
### `<webview>.stop()`
実行待ち中のナビゲーションを中止します。
### `<webview>.reload()`
ゲストページを再読み込みします。
### `<webview>.reloadIgnoringCache()`
キャッシュを無効にして再読み込みします。
### `<webview>.canGoBack()`
ページを戻ることができるかのbool値を返します。
### `<webview>.canGoForward()`
ページを進むことができるかのbool値を返します。
### `<webview>.canGoToOffset(offset)`
* `offset` Integer
`offset`だけ、移動できるかのbool値を返します。
### `<webview>.clearHistory()`
移動履歴をクリアします。
### `<webview>.goBack()`
ページを戻ります。
### `<webview>.goForward()`
ページを進みます。
### `<webview>.goToIndex(index)`
* `index` Integer
インデックスを指定して移動します。
### `<webview>.goToOffset(offset)`
* `offset` Integer
現在の場所からの移動量を指定して移動します。
### `<webview>.isCrashed()`
レンダラプロセスがクラッシュしているかを返します。
### `<webview>.setUserAgent(userAgent)`
* `userAgent` String
ゲストページ用のUser agentを変更します。
### `<webview>.getUserAgent()`
User agentを取得します。
### `<webview>.insertCSS(css)`
* `css` String
ゲストエージにCSSを追加します。
### `<webview>.executeJavaScript(code, userGesture, callback)`
* `code` String
* `userGesture` Boolean - Default `false`.
* `callback` Function (optional) - Called after script has been executed.
* `result`
ページ内で`code`を評価します。`userGesture`を設定した場合、ページ内でgesture contextを作成します。例えば`requestFullScreen`のようなユーザーの対応が必要なHTML APIでは、自動化時にこれが有利になる時があります。
### `<webview>.openDevTools()`
DevToolsを開きます。
### `<webview>.closeDevTools()`
DevToolsを閉じます。
### `<webview>.isDevToolsOpened()`
DevToolsが開いているかのbool値を返します。
### `<webview>.isDevToolsFocused()`
DevToolsがフォーカスを得ているかのbool値を返します。
### `<webview>.inspectElement(x, y)`
* `x` Integer
* `y` Integer
ゲストページの(`x`, `y`)の位置にある要素を調べます。
### `<webview>.inspectServiceWorker()`
ゲストページのサービスワーカーのDevToolsを開きます。
### `<webview>.setAudioMuted(muted)`
* `muted` Boolean
ページをミュートするかを設定します。
### `<webview>.isAudioMuted()`
ページがミュートされているかを返します。
### `<webview>.undo()`
`undo` (元に戻す)を行います。
Executes editing command `undo` in page.
### `<webview>.redo()`
`redo` (やり直し)を行います。
### `<webview>.cut()`
`cut` (切り取り)を行います。
### `<webview>.copy()`
`copy` (コピー)を行います。
### `<webview>.paste()`
`paste` (貼り付け)を行います。
### `<webview>.pasteAndMatchStyle()`
`pasteAndMatchStyle`(貼り付けてスタイルを合わせる)を行います。
### `<webview>.delete()`
`delete` (削除)を行います。
### `<webview>.selectAll()`
`selectAll` (全て選択)を行います。
### `<webview>.unselect()`
`unselect` (選択を解除)を行います。
### `<webview>.replace(text)`
* `text` String
`replace` (置き換え)を行います。
### `<webview>.replaceMisspelling(text)`
* `text` String
`replaceMisspelling` (スペル違いを置き換え)を行います。
### `<webview>.insertText(text)`
* `text` String
`text`を選択された要素に挿入します。
### `<webview>.findInPage(text[, options])`
* `text` String - 検索する文字列(空文字列にはできません)
* `options` Object (省略可)
* `forward` Boolean - 前方・後方のどちらを検索するかどうかです。省略時は`true`で前方に検索します。
* `findNext` Boolean - 初回検索か、次を検索するかを選びます。省略時は`false`で、初回検索です。
* `matchCase` Boolean - 大文字・小文字を区別するかを指定します。省略時は`false`で、区別しません。
* `wordStart` Boolean - ワード始まりからの検索かを指定します。省略時は`false`で、語途中でもマッチします。
* `medialCapitalAsWordStart` Boolean - `wordStart`指定時、CamelCaseの途中もワード始まりと見なすかを指定します。省略時は`false`です。
`text`をページ内全てから検索し、リクエストに使用するリクエストID(`Integer`)を返します。リクエストの結果は、[`found-in-page`](webview-tag.md#event-found-in-page)イベントを介して受け取ることができます。
### `<webview>.stopFindInPage(action)`
* `action` String - [`<webview>.findInPage`](webview-tag.md#webviewtagfindinpage)リクエストを終わらせる時にとるアクションを指定します。
* `clearSelection` - 選択をクリアします。
* `keepSelection` - 選択を通常の選択へと変換します。
* `activateSelection` - 選択ノードにフォーカスを当て、クリックします。
`action`にしたがって`webview`への`findInPage`リクエストを中止します。
### `<webview>.print([options])`
`webview`で表示されているウェブページを印刷します。`webContents.print([options])`と同じです。
### `<webview>.printToPDF(options, callback)`
`webview`のウェブサイトをPDFとして印刷します。`webContents.printToPDF(options, callback)`と同じです。
### `<webview>.send(channel[, arg1][, arg2][, ...])`
* `channel` String
* `arg` (optional)
`channel`を通じてレンダラプロセスに非同期メッセージを送ります。合わせて、
任意のメッセージを送ることができます。レンダラプロセスは`ipcRenderer`モジュールを
使用して、`channel`イベントでメッセージを把握することができます。
サンプルが[webContents.send](web-contents.md#webcontentssendchannel-args)にあります。
### `<webview>.sendInputEvent(event)`
* `event` Object
入力イベント(`event`)をページに送ります。
`event`に関する詳しい説明は、[webContents.sendInputEvent](web-contents.md##webcontentssendinputeventevent)を
参照してください。
### `<webview>.getWebContents()`
`webview`に関連付けられた[WebContents](web-contents.md)を取得します。
## DOM events
`webview`タグで有効なイベントは次の通りです:
### Event: 'load-commit'
返り値:
* `url` String
* `isMainFrame` Boolean
読み込みが行われる時に発生するイベントです。
これには、現在のドキュメントやサブフレームの読み込みが含まれます。ただし、非同期なリソース読み込みは含まれません。
### Event: 'did-finish-load'
ナビゲーションが完了した際に発生するイベントです。
言い換えると、タブ上の"くるくる"が止まった時に発生し、`onload`イベントが配信されます。
### Event: 'did-fail-load'
返り値:
* `errorCode` Integer
* `errorDescription` String
* `validatedURL` String
* `isMainFrame` Boolean
`did-finish-load`と同じようですが、読み込みに失敗した時やキャンセルされた時に発生します。
例えば、`window.stop()`が呼ばれた時などです。
### Event: 'did-frame-finish-load'
返り値:
* `isMainFrame` Boolean
フレームがナビゲーションを終えた時に発生します。
### Event: 'did-start-loading'
タブ上の"くるくる"が回転を始めた時点でこのイベントが発生します。
### Event: 'did-stop-loading'
タブ上の"くるくる"が回転をやめた時点でこのイベントが発生します。
### Event: 'did-get-response-details'
返り値:
* `status` Boolean
* `newURL` String
* `originalURL` String
* `httpResponseCode` Integer
* `requestMethod` String
* `referrer` String
* `headers` Object
* `resourceType` String
読み込むリソースの詳細がわかった時点で発生します。
`status`は、リソースをダウンロードするソケット接続であるかを示します。
### Event: 'did-get-redirect-request'
返り値:
* `oldURL` String
* `newURL` String
* `isMainFrame` Boolean
リソースの取得中に、リダイレクトを受け取った際に発生します。
### Event: 'dom-ready'
該当フレーム内のドキュメントが読み込まれた時に発生します。
### Event: 'page-title-updated'
返り値:
* `title` String
* `explicitSet` Boolean
ページのタイトルが設定された時に発生します。
タイトルがurlから作られたものであれば、`explicitSet`は`false`になります。
### Event: 'page-favicon-updated'
返り値:
* `favicons` Array - URLの配列
ページのfavicon URLを受け取った時に発生します。
### Event: 'enter-html-full-screen'
HTML APIでフルスクリーンになった際に発生します。
### Event: 'leave-html-full-screen'
HTML APIでフルスクリーンでなくなった際に発生します。
### Event: 'console-message'
返り値:
* `level` Integer
* `message` String
* `line` Integer
* `sourceId` String
ゲストウィンドウがコンソールメッセージを記録する際に発生します。
下記のサンプルは、埋め込まれたサイトのログを、log levelに関係なく親側に転送します。
```javascript
webview.addEventListener('console-message', (e) => {
console.log('Guest page logged a message:', e.message)
})
```
### Event: 'found-in-page'
返り値:
* `result` Object
* `requestId` Integer
* `finalUpdate` Boolean - 次のレスポンスが待っているかを示します。
* `activeMatchOrdinal` Integer (optional) - このマッチの場所を示します。
* `matches` Integer (optional) - マッチした数です。
* `selectionArea` Object (optional) - 最初のマッチした場所です。
[`webview.findInPage`](webview-tag.md#webviewtagfindinpage)リクエストで結果が得られた場合に発生します。
```javascript
webview.addEventListener('found-in-page', (e) => {
if (e.result.finalUpdate) webview.stopFindInPage('keepSelection')
})
const requestId = webview.findInPage('test')
```
### Event: 'new-window'
返り値:
* `url` String
* `frameName` String
* `disposition` String -`default`, `foreground-tab`, `background-tab`,
`new-window`, `other`のどれかです。
* `options` Object - 新しい`BrowserWindow`を作る際に使用されるoptionです。
ゲストページが新しいブラウザウィンドウを開こうとする際に発生します。
下記のサンプルは、新しいURLをシステムのデフォルトブラウザで開きます。
```javascript
const {shell} = require('electron')
webview.addEventListener('new-window', (e) => {
const protocol = require('url').parse(e.url).protocol
if (protocol === 'http:' || protocol === 'https:') {
shell.openExternal(e.url)
}
})
```
### Event: 'will-navigate'
返り値:
* `url` String
ユーザーまたはページがナビゲーションを始めようとする際に発生します。これは、
`window.location`が変更になる時や、ユーザーがリンクをクリックした際に発生します。
`<webview>.loadURL`や`<webview>.back`でプログラムによりナビゲーションが始まった場合は
このイベントは発生しません。
アンカーリンクのクリックや`window.location.hash`の変更といった、ページ内遷移でも、このイベントは発生しません。
この場合は、`did-navigate-in-page`イベントを使ってください。
`event.preventDefault()`は使用しても__何も起こりません__。
### Event: 'did-navigate'
返り値:
* `url` String
ナビゲーション終了時に呼ばれます。
アンカーリンクのクリックや`window.location.hash`の変更といった、ページ内遷移では、このイベントは発生しません。
この場合は、`did-navigate-in-page`イベントを使ってください。
### Event: 'did-navigate-in-page'
返り値:
* `url` String
ページ内遷移の際に発生します。
ページ内遷移の際は、ページURLは変更になりますが、ページ外部へのナビゲーションは発生しません。
例として、アンカーリンクのクリック時や、DOMの`hashchange`イベントが発生した時にこれが起こります。
### Event: 'close'
ゲストページそのものが、閉じられようとしている際に発生します。
下記のサンプルは、`webview`が閉じられる際に、`about:blank`にナビゲートします。
```javascript
webview.addEventListener('close', () => {
webview.src = 'about:blank'
})
```
### Event: 'ipc-message'
返り値:
* `channel` String
* `args` Array
ゲストページが埋め込み元に非同期メッセージを送ってきた際に発生します。
`sendToHost`メソッドと、`ipc-message`イベントを利用すると、ゲストページと埋め込み元のページでデータのやり取りを簡単に行うことができます。
```javascript
// 埋め込み元ページ(<webview>があるページ)で
webview.addEventListener('ipc-message', (event) => {
console.log(event.channel)
// Prints "pong"
})
webview.send('ping')
```
```javascript
// ゲストページ(<webview>内)で
const {ipcRenderer} = require('electron')
ipcRenderer.on('ping', () => {
ipcRenderer.sendToHost('pong')
})
```
### Event: 'crashed'
プロセスがクラッシュした際に発生します。
### Event: 'gpu-crashed'
GPUプロセスがクラッシュした際に発生します。
### Event: 'plugin-crashed'
返り値:
* `name` String
* `version` String
プラグインプロセスがクラッシュした際に発生します。
### Event: 'destroyed'
WebContentsが破壊された際に呼ばれます。
### Event: 'media-started-playing'
メディアの再生が開始された際に呼ばれます。
### Event: 'media-paused'
メディアが一時停止になるか、再生を終えた際に呼ばれます。
### Event: 'did-change-theme-color'
返り値:
* `themeColor` String
ページのテーマカラーが変更になった際に呼ばれます。
これは、下記のようなメタタグがある際に通常発生します:
```html
<meta name='theme-color' content='#ff0000'>
```
### Event: 'devtools-opened'
DevToolsが開かれた際に発生します。
### Event: 'devtools-closed'
DevToolsが閉じられた際に発生します。
### Event: 'devtools-focused'
DevToolsにフォーカスが当たった際 / 開かれた際に発生します。
[blink-feature-string]: https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5?l=62

View file

@ -1,59 +0,0 @@
# `window.open` 関数
Webページで新しいウィンドウを作成するために`window.open`をコールすると、`url`用の`BrowserWindow`の新しいインスタンスが作成され、プロキシはそれ以上の制御を制限したページを許可する`window.open`を返します。
プロキシは伝統的なウェブページと互換性のある制限された標準的な機能が実装されています。新しいウィンドウの完全な制御のために、直接、`BrowserWindow`を作成する必要があります。
新しく作成された`BrowserWindow`は、既定で、親ウィンドウのオプションを継承し、`features`文字列で設定したオプションを継承しオーバーライドします。
### `window.open(url[, frameName][, features])`
* `url` String
* `frameName` String (optional)
* `features` String (optional)
新しいウィンドウを作成し、`BrowserWindowProxy` クラスのインスタンを返します。
`features`文字列は標準的なブラウザーのフォーマットに従いますが、それぞれの機能は`BrowserWindow`のオプションフィールドである必要があります。
### `window.opener.postMessage(message, targetOrigin)`
* `message` String
* `targetOrigin` String
優先的なオリジンなく特定のオリジンまたは`*`で親ウィンドウにメッセージが送信されます。
## Class: BrowserWindowProxy
`BrowserWindowProxy`オブジェクトは`window.open`から返り、子ウィンドウに制限された機能を提供します。
### `BrowserWindowProxy.blur()`
子ウィンドウからフォーカスを削除します。
### `BrowserWindowProxy.close()`
アンロードイベントをコールせず、強制的に子ウィンドウを閉じます。
### `BrowserWindowProxy.closed`
子ウィンドウがクローズした後、trueを設定します。
### `BrowserWindowProxy.eval(code)`
* `code` String
子ウィンドウでコードを評価します。
### `BrowserWindowProxy.focus()`
前面にウィンドウを出し、子ウィンドウにフォーカスします。
### `BrowserWindowProxy.postMessage(message, targetOrigin)`
* `message` String
* `targetOrigin` String
優先的なオリジンなく特定のオリジンまたは`*`で子ウィンドウにメッセージが送信されます。
それらのメッセージに加え、子ウィンドウはプロパティとシグナルメッセージなしで`window.opener`オブジェクトを実装します。

View file

@ -1,37 +0,0 @@
# Electron と NW.js (node-webkit)の技術的違い
__Note: Electron は以前は Atom Shell と呼ばれていました__
NW.js と同じように Electron は HTML と JavaScript でデスクトップアプリケーションを書くためのプラットフォームを提供しており、また web ページからローレベルなシステムにもアクセスできる Node との統合的な仕組みを持っていました。
しかし、2つのプロジェクトには根本的な違いがあり、Electron と NW.js は完全に別なプロダクトになりました。
__1. アプリケーションの開始__
NW.js ではアプリケーションは web ページから開始されます。 `package.json` にてアプリケーションのメインページURLを指定し、ブラウザウィンドウがそのページを開くことで、それがアプリケーションのメインウィンドウとなります。
Electron では、JavaScript のスクリプトがエントリポイントとなります。URLを直接指定するのではなく、自分でブラウザウィンドウを作成し、API を通して HTML ファイルを読み込みます。また、ウィンドウで発生するイベントを購読して、アプリケーションの終了をハンドリングする必要もあります。
Electron は Node.js ランタイムのように動作します。 Electron の API はローレベルなので、[PhantomJS](http://phantomjs.org/)の代わりにブラウザテストに使用することもできます。
__2. ビルドシステム__
Chromium の全てのコードをビルドする複雑さを回避するため、Electron は [`libchromiumcontent`](https://github.com/electron/libchromiumcontent) を通して Chromium の Content API にアクセスします。
`libchromiumcontent` は Chromium の Content モジュールとそれに依存する全てを含んだ単一の共有ライブラリです。
おかげで Electron をビルドするためにパワフルなマシンを用意する必要はありません。
__3. Node との統合__
NW.js では web ページと Node を統合するために Chromium にパッチを適用しています。一方、Electron では Chromium を改造する方法を取らず、libuv ループとプラットフォームのメッセージループを統合する方法を私達は取りました。
何をやっているかについては、[`node_bindings`][node-bindings] を参照してください。
__4. Multi-context__
もしあなたが経験豊かな NW.js ユーザーならば、Node のコンテキストと Web のコンテキストに精通しているかと思います。これらのコンセプトは、NW.js の実装によって導入されたものです。
Node の [multi-context](http://strongloop.com/strongblog/whats-new-node-js-v0-12-multiple-context-execution/) 機能によって、Electron は Web ページに新しい Javascript のコンテキストを導入しません。
Note: NW.js は バージョン 0.13 からオプションとして multi-context をサポートしました。
[node-bindings]: https://github.com/electron/electron/tree/master/atom/common

View file

@ -1,188 +0,0 @@
# ビルド方法 (Linux)
Linux で Electron をビルドする際は以下のガイドラインに従って下さい
## 事前準備
* 25GB のディスク空き容量と8GB の RAM が少なくとも必要です
* Python 2.7.xが必要です。CentOS 6.x のようないくつかのディストリビューションはまだ Python 2.6.x を使ってるので、`python -V` で Python のバージョンを確認する必要があるでしょう。
* Node.js v0.12.x が必要です。Node のインストールには色んな方法があります。[Node.js](http://nodejs.org) からソースコードをダウンロードしてビルドすることもできます。そうすることで root でないユーザーのホームディレクトリに Node をインストールすることもできます。あるいは [NodeSource](https://nodesource.com/blog/nodejs-v012-iojs-and-the-nodesource-linux-repositories) のようなレポジトリを試してみてください。
* Clang 3.4 以上が必要です。
* GTK+ と libnotify の開発用ヘッダーが必要です。
Ubuntu では以下のライブラリをインストールしてください。
```bash
$ sudo apt-get install build-essential clang libdbus-1-dev libgtk2.0-dev \
libnotify-dev libgnome-keyring-dev libgconf2-dev \
libasound2-dev libcap-dev libcups2-dev libxtst-dev \
libxss1 libnss3-dev gcc-multilib g++-multilib curl
```
RHEL / CentOS では以下のライブラリをインストールしてください。
```bash
$ sudo yum install clang dbus-devel gtk2-devel libnotify-devel \
libgnome-keyring-devel xorg-x11-server-utils libcap-devel \
cups-devel libXtst-devel alsa-lib-devel libXrandr-devel \
GConf2-devel nss-devel
```
Fedora では以下のライブラリをインストールしてください。
```bash
$ sudo dnf install clang dbus-devel gtk2-devel libnotify-devel \
libgnome-keyring-devel xorg-x11-server-utils libcap-devel \
cups-devel libXtst-devel alsa-lib-devel libXrandr-devel \
GConf2-devel nss-devel
```
他のディストリビューションでは pacman のようなパッケージマネージャーを通して似たようなインストールパッケージを提供しているかもしれません。あるいはソースコードからコンパイルもできます。
## ソースコードの取得
```bash
$ git clone https://github.com/electron/electron.git
```
## Bootstrapp
bootstrap スクリプトは、ビルドに必要な全ての依存関係の解決と、プロジェクトファイルを作成してくれます。
スクリプトの実行には Python 2.7.x が必要です。これらのファイルをダウンロードするには時間が結構かかります。Electron のビルドには [ninja](https://ninja-build.org/) を使用しているので、 `Makefile` が生成されないことに注意してください。
```bash
$ cd electron
$ ./script/bootstrap.py -v
```
### クロスコンパイル
`arm` アーキテクチャ向けにビルドしたい場合、下記の依存ライブラリをインストールしてください。
```bash
$ sudo apt-get install libc6-dev-armhf-cross linux-libc-dev-armhf-cross \
g++-arm-linux-gnueabihf
```
`arm``ia32` 向けにクロスコンパイルするには、`bootstrap.py` に `--target_arch` パラメータを渡してください。
```bash
$ ./script/bootstrap.py -v --target_arch=arm
```
## ビルド
`Release` 向けと `Debug` 向けにビルドするには下記を実行してください。
```bash
$ ./script/build.py
```
このスクリプトはとても大きな Electron の実行ファイルを `out/R` に生成します。ファイルサイズは1.3GB を超えます、なぜかというと、`Release` 向けのバイナリがデバッグシンボルを含むためです。ファイルサイズを減らすには下記のように `create-dist.py` を実行してください。
```bash
$ ./script/create-dist.py
```
このスクリプトは非常に小さい小さいファイルサイズのディストリビューションを `dist` ディレクトリに生成します。`create-dist.py` 実行後、まだ `out/R` に 1.3 GB を超えたバイナリがあるので、削除したくなることでしょう。
`Debug` 向けのみビルドしたい時は下記を実行してください。
```bash
$ ./script/build.py -c D
```
ビルドが終われば、`out/D` ディレクトリ配下に `Electron.app`が生成されます。
## ビルドファイルのクリーン
ビルドファイルを削除するには下記を実行してください。
```bash
$ ./script/clean.py
```
## トラブルシューティング
### Error While Loading Shared Libraries: libtinfo.so.5
あらかじめビルドされた `clang``libtinfo.so.5` をリンクしようとします。
ホストのシステムによっては 適切な `libncurses` への symlink を作成したほうがよいです。
```bash
$ sudo ln -s /usr/lib/libncurses.so.5 /usr/lib/libtinfo.so.5
```
## Tests
コーディング規約どおりになっているかテストするには下記を実行してください。
```bash
$ npm run lint
```
機能のテストは下記を実行してください。
```bash
$ ./script/test.py
```
## 高度なトピック
デフォルトのビルド設定は、メジャーなデスクトップLinux 向けになっています。
ある特定のディストリビューションやデバイス向けにビルドする際は、下記の情報が役に立つでしょう。
### `libchromiumcontent` をローカルでビルドする
あらかじめビルドされた `libchromiumcontent` のバイナリの使用を回避するには、下記のように`--build_libchromiumcontent` オプションを `bootstrap.py` に渡してください。
```bash
$ ./script/bootstrap.py -v --build_libchromiumcontent
```
`shared_library` の設定はデフォルトではビルドされないことに注意してください。以下のモードを使うことで、Electron の `Release` バージョンのみビルドすることができます。
```bash
$ ./script/build.py -c R
```
### ダウンロードした `clang` ではなくシステムの `clang` を使う
デフォルトではElectron は Chromium プロジェクトによって提供されるあらかじめビルドされた `clang` を使ってビルドします。もしなんらかの理由でシステムにインストールされた `clang` でビルドしたい場合、 `--clang_dir=<path>` オプションをつけて、`bootstrap.py` を実行してください。オプションを渡すことで、ビルドスクリプトは `clang``<path>/bin/` にあるとして実行されます。
例えば、`/user/local/bin/clang` 配下に `clang` をインストールした場合、以下のようになります。
```bash
$ ./script/bootstrap.py -v --build_libchromiumcontent --clang_dir /usr/local
$ ./script/build.py -c R
```
### `clang` 以外のコンパイラを使う
Electron のビルドに `g++` のようなコンパイラを使うためには、まず `--disable_clang` オプションで、`clang` を無効化し、そして `CC``CXX` 環境変数を望むように設定してください。
例えば GCC toolchain でビルドするには以下のようになります。
```bash
$ env CC=gcc CXX=g++ ./script/bootstrap.py -v --build_libchromiumcontent --disable_clang
$ ./script/build.py -c R
```
### 環境変数
また `CC``CXX` とは別に、下記の環境変数を設定することでもビルド設定をイジることができます。
* `CPPFLAGS`
* `CPPFLAGS_host`
* `CFLAGS`
* `CFLAGS_host`
* `CXXFLAGS`
* `CXXFLAGS_host`
* `AR`
* `AR_host`
* `CC`
* `CC_host`
* `CXX`
* `CXX_host`
* `LDFLAGS`
これら環境変数は `bootstrap.py` 実行時に設定されてないといけません。 `build.py` 実行時に設定しても動きません。

View file

@ -1,62 +0,0 @@
# ビルド方法 (macOS)
macOS で Electron をビルドする際は以下のガイドラインに従って下さい
## 前提条件
* macOS >= 10.8
* [Xcode](https://developer.apple.com/technologies/tools/) >= 5.1
* [node.js](http://nodejs.org) (external)
Homebrew からダウンロードした Python を使用している場合、下記 python モジュールもインストールしてください
* pyobjc
## ソースコードの取得
```bash
$ git clone https://github.com/electron/electron.git
```
## bootstrap
bootstrap スクリプトは、ビルドに必要な全ての依存関係の解決と、プロジェクトファイルを作成してくれます。Electron のビルドには [ninja](https://ninja-build.org/) を使用しているので、 Xcode project が生成されないことに注意してください。
```bash
$ cd electron
$ ./script/bootstrap.py -v
```
## ビルド
`Release` 向けと `Debug` 向けを両方共ビルドするには下記を実行してください。
```bash
$ ./script/build.py
```
`Debug` 向けのみビルドしたい時は下記を実行してください。
```bash
$ ./script/build.py -c D
```
ビルドが終われば、`out/D` ディレクトリ配下に `Electron.app`が生成されます。
## 32bit サポート
Electron は 64bit の macOS 向けのみビルドできます。32bit macOS への対応の予定はありません。
## テスト
コーディング規約を満たしているかどうかは下記でテストできます。
```bash
$ ./script/cpplint.py
```
機能のテストは下記でテストできます。
```bash
$ ./script/test.py
```

View file

@ -1,44 +0,0 @@
# コーディング規約
Electron 開発におけるコーディング規約です。
`npm run lint` を実行することで `cpplint` 及び `eslint` によって
検出された規約違反を検出することができます。
## C++ と Python
C++ と Python は Chromium の[コーディング規約](http://www.chromium.org/developers/coding-style)を踏襲しています。`script/cpplint.py` というスクリプトを実行することで、全てのファイルがこの規約に従っているかどうかチェックできます。
私達が今使っている Python のバージョンは Python 2.7 です。
C++ のコードは Chromium の抽象型をたくさん使っているので、それに精通していることをオススメします。Chromium の [Important Abstractions and Data Structures](https://www.chromium.org/developers/coding-style/important-abstractions-and-data-structures) のドキュメントから始めるのがよいでしょう。ドキュメントでは、いくつかの特別な型や、スコープのある型(スコープ外に出ると自動でメモリが開放される型)、ログの仕組みなどが言及されています。
## JavaScript
* [standard](http://npm.im/standard) JavaScript style で書いてください。
* ファイルは改行で**終わらないでください**。Google の規約と合わないためです。
* ファイル名はアンダーバー `_` で結合せず、ハイフン `-` で結合してください。
例えば `file_name.js` ではなく `file-name.js` です。なぜかというと
[github/atom](https://github.com/github/atom) モジュールの名前が
`module-name` 形式だからです。このルールは `.js` ファイルのみ適用されます。
* 必要に応じて新しい ES6/ES2015 の構文を使用してください。
* [`const`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const)
を定数使用時に
* [`let`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let)
を変数宣言時に
* [Arrow functions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions)
`function () { }` の代わりに
* [Template literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals)
`+` を使って文字結合する代わりに
## 名前付け
Electron の API は Node.js と同じ大文字小文字のルールを使用しています。
- モジュールがクラスの場合は、`BrowserWindow` のようにキャメルケースを使います。
- モジュールが API の一部なら `globalShortcut` のように小文字大文字を混ぜて使います(`mixedCase`)。
- `win.webContents` のように API が オブジェクトのプロパティで、かつ分けると複雑になる場合は、小文字大文字を混ぜて使います(`mixedCase`)。
- その他のモジュールでないAPIでは、`<webview> Tag` や `Process Object` のように通常通り名づけます。
新しい API を作る際は、jQuery のように一つの関数で getter/setter にするより、getter と setter を分ける方が望ましいです。
例えば `.text([text])` ではなく `.getText()``.setText(text)` にします。この辺りは [issue 46](https://github.com/electron/electron/issues/46) で議論されました。

View file

@ -1,133 +0,0 @@
# Electron FAQ
## Electronは、いつ最新のChromeにアップグレードされますか?
ElectronのChromeバージョンは、通常、新しいChromeのstabeleバージョンがリリースされた後、12週間以内に上げられます。ただし、この期間というのは保障されてはおらず、またバージョンアップでの作業量に左右されます。
また、Chromeのstableチャンネルのみを使用し、もし、重要な修正がbetaまたはdevチャンネルにある場合、それをバックポートします。
もっと知りたければ、[セキュリティについて](../tutorial/security.md)をご参照ください。
## Electronは、いつ最新のNode.jsにアップグレードされますか?
Node.js の新しいバージョンがリリースされたとき、私たちは Electron の Node.js を更新するのを通常約1か月待ちます。そのようにして、とても頻繁に発生している、新しい Node.js バージョンによって取り込まれたバグによる影響を避けることができます。
通常、Node.js の新しい機能は V8 のアップグレードによってもたらされますが、Electron は Chrome ブラウザーに搭載されている V8 を使用しているので、新しい Node.js に入ったばかりのピカピカに新しい JavaScript 機能は Electron ではたいてい既に導入されています。
## ウェブページ間のデータを共有する方法は?
ウェブページレンダラープロセス間のデータを共有するために最も単純な方法は、ブラウザで、すでに提供されているHTML5 APIを使用することです。もっとも良い方法は、[Storage API][storage]、[`localStorage`][local-storage]、[`sessionStorage`][session-storage]、[IndexedDB][indexed-db]です。
```javascript
// In the main process.
global.sharedObject = {
someProperty: 'default value'
}
```
```javascript
// In page 1.
require('remote').getGlobal('sharedObject').someProperty = 'new value'
```
```javascript
// In page 2.
console.log(require('remote').getGlobal('sharedObject').someProperty)
```
## 何分か経つと、アプリの Window/tray が消えてしまいます
これは、Window/trayを格納するのに使用している変数がガベージコレクトされたときに発生します。
この問題に遭遇した時には、次のドキュメントを読むことをお勧めします。
* [Memory Management][memory-management]
* [Variable Scope][variable-scope]
もし簡単に修正したい場合は、コードを以下のように修正して変数をグローバルにすると良いでしょう:
変更前:
```javascript
app.on('ready', function () {
var tray = new Tray('/path/to/icon.png')
})
```
変更後:
```javascript
var tray = null
app.on('ready', function () {
tray = new Tray('/path/to/icon.png')
})
```
## ElectronでjQuery/RequireJS/Meteor/AngularJSを使用できません
Electronに組み込まれているNode.jsの影響で, `module`, `exports`, `require`のようなシンボルがDOMに追加されています。このため、いくつかのライブラリでは同名のシンボルを追加しようとして問題が発生することがあります。
これを解決するために、Electronに組み込まれているnodeを無効にすることができます。
```javascript
// In the main process.
var win = new BrowserWindow({
webPreferences: {
nodeIntegration: false
}
})
```
しかし、Node.jsとElectron APIを使用した機能を維持したい場合は、ほかのライブラリを読み込む前に、ページのシンボルをリネームする必要があります。
```html
<head>
<script>
window.nodeRequire = require;
delete window.require;
delete window.exports;
delete window.module;
</script>
<script type="text/javascript" src="jquery.js"></script>
</head>
```
## `require('electron').xxx` は定義されていません。
Electronの組み込みモジュールを使うとに、次のようなエラーに遭遇するかもしれません。
```
> require('electron').webFrame.setZoomFactor(1.0);
Uncaught TypeError: Cannot read property 'setZoomLevel' of undefined
```
これは、ローカルまたはグローバルのどちらかで [npm `electron` module][electron-module] をインストールしたことが原因で、Electronの組み込みモジュールを上書きしてしまいます。
正しい組み込みモジュールを使用しているかを確認するために、`electron`モジュールのパスを出力します。
```javascript
console.log(require.resolve('electron'))
```
そして、次の形式かどうかを確認します。
```
"/path/to/Electron.app/Contents/Resources/atom.asar/renderer/api/lib/exports/electron.js"
```
もし、`node_modules/electron/index.js` のような形式の場合は、npm `electron` モジュールを削除するか、それをリネームします。
```bash
npm uninstall electron
npm uninstall -g electron
```
しかし、組み込みモジュールを使用しているのに、まだこのエラーが出る場合、不適切なプロセスでモジュールを使用しようとしている可能性が高いです。例えば、`electron.app`はメインプロセスのみで使え、一方で`electron.webFrame`はレンダラープロセスのみに提供されています。
[memory-management]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management
[variable-scope]: https://msdn.microsoft.com/library/bzt2dkta(v=vs.94).aspx
[electron-module]: https://www.npmjs.com/package/electron
[storage]: https://developer.mozilla.org/en-US/docs/Web/API/Storage
[local-storage]: https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage
[session-storage]: https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage
[indexed-db]: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API

View file

@ -1,108 +0,0 @@
# アプリケーションの配布
Electronでアプリケーションを配布するために、アプリケーションを`app` という名前のディレクトリにし、Electronのリソースディレクトリ(macOS では
`Electron.app/Contents/Resources/` 、Linux と Windows では `resources/`)配下に置くべきです,
macOS:
```text
electron/Electron.app/Contents/Resources/app/
├── package.json
├── main.js
└── index.html
```
Windows と Linux:
```text
electron/resources/app
├── package.json
├── main.js
└── index.html
```
`Electron.app` (または Linux上では、`electron`、Windows上では、 `electron.exe`)を実行すると、Electronはアプリケーションを開始します。`electron` ディレクトリを最終的なユーザーに提供するために配布します。
## ファイルにアプリケーションをパッケージングする
すべてのソースコードをコピーすることでアプリケーションを提供する方法とは別に、アプリケーションのソースコードをユーザーに見えるのを避けるために、[asar](https://github.com/electron/asar) にアーカイブしてアプリケーションをパッケージ化することができます。
`app` フォルダの代わりに `asar` アーカイブを使用するためには、アーカイブファイルを `app.asar` という名前に変更し、Electron のリソースディレクトリに以下のように配置する必要があります。すると、Electron はアーカイブを読み込もうとし、それを開始します。
macOS:
```text
electron/Electron.app/Contents/Resources/
└── app.asar
```
Windows と Linux:
```text
electron/resources/
└── app.asar
```
[Application packaging](application-packaging.md)で、詳細を確認できます。
## ダウンロードするバイナリのブランド名の変更
Electronにバンドルした後、ユーザーに配布する前に、 Electron名を変更したいでしょう。
### Windows
`electron.exe`を任意の名前に変更でき、[rcedit](https://github.com/atom/rcedit)
のようなツールでアイコンやその他の情報を編集できます。
### macOS
`Electron.app` を任意の名前に変更でき、次のファイルの `CFBundleDisplayName``CFBundleIdentifier``CFBundleName`のフィールドの名前を変更する必要があります。
* `Electron.app/Contents/Info.plist`
* `Electron.app/Contents/Frameworks/Electron Helper.app/Contents/Info.plist`
ヘルパーアプリケーションの名前を変更して、アクティビティモニタに `Electron Helper` と表示されないようにすることもできますが、その際はヘルパーアプリケーションの実行可能ファイルの名前を変更したことを確認してください。
名前変更後のアプリケーションの構成は以下の通りです:
```
MyApp.app/Contents
├── Info.plist
├── MacOS/
│   └── MyApp
└── Frameworks/
├── MyApp Helper EH.app
| ├── Info.plist
| └── MacOS/
|    └── MyApp Helper EH
├── MyApp Helper NP.app
| ├── Info.plist
| └── MacOS/
|    └── MyApp Helper NP
└── MyApp Helper.app
├── Info.plist
└── MacOS/
   └── MyApp Helper
```
### Linux
`electron` を任意の名前に変更できます。
## ソースからElectronをリビルドしてブランド名を変更する
プロダクト名を変更し、ソースからビルドすることで、Electronのブランド名を変更できます。これをするために、`atom.gyp` ファイルを変更し、クリーンリビルドする必要があります。
### grunt-build-atom-shell
Electron のコードを手動チェックアウトして再構築するのには複雑な手順が必要ですが、これを自動的に扱うための Grunt タスクが作られています:
[grunt-build-atom-shell](https://github.com/paulcbetts/grunt-build-atom-shell).
このタスクは自動的に `.gyp` ファイルの編集、ソースからのビルド、そして新しい実行可能ファイル名に一致するようにネイティブの Node モジュールを再構築します。
## パッケージングツール
手動でアプリケーションをパッケージ化する以外の方法として、サードパーティのパッケジングツールを選ぶこともできます。
* [electron-packager](https://github.com/maxogden/electron-packager)
* [electron-builder](https://github.com/loopline-systems/electron-builder)

View file

@ -1,149 +0,0 @@
# アプリケーションのパッケージ化
Windows上の長いパス名周りの[問題](https://github.com/joyent/node/issues/6960) を軽減したり、`require`を若干スピードアップしたり、簡単な調査からソースコードを隠したりするために、ソースコードを少々変更して、アプリケーションを [asar][asar] アーカイブとしてパッケージ化することもできます。
## `asar` アーカイブの生成
[asar][asar] アーカイブは、つのファイルに連結されたtarライクのシンプルなフォーマットです。Electron はファイル全体をアンパックしなくても任意のファイルを読み込めます。
アプリを `asar` アーカイブにパッケージ化する手順:
### 1. asar ユーティリティのインストール
```bash
$ npm install -g asar
```
### 2. `asar pack`でパッケージ化する
```bash
$ asar pack your-app app.asar
```
## `asar` アーカイブを使用する
Electronには、2組のAPIがあります。Node.js により提供される Node API、そして Chromium により提供される Web API です。どちらの API も `asar` アーカイブからのファイル読み込みに対応しています。
### Node API
Electronでは特定のパッチで、`fs.readFile` や `require` のようなNode APIは、`asar` アーカイブを仮想ディレクトリのように扱い、ファイルをファイルシステム上の通常のファイルのように扱います。
例えば、`/path/to` 配下に、`example.asar` アーカイブがあると仮定します:
```bash
$ asar list /path/to/example.asar
/app.js
/file.txt
/dir/module.js
/static/index.html
/static/main.css
/static/jquery.min.js
```
`asar` アーカイブ内のファイルを読み込む:
```javascript
const fs = require('fs')
fs.readFileSync('/path/to/example.asar/file.txt')
```
アーカイブのルート直下にあるすべてのファイルを一覧にする:
```javascript
const fs = require('fs')
fs.readdirSync('/path/to/example.asar')
```
アーカイブからモジュールを使用する:
```javascript
require('/path/to/example.asar/dir/module.js')
```
`BrowserWindow` を使って `asar` アーカイブ内の Web ページを表示することもできます:
```javascript
const {BrowserWindow} = require('electron')
let win = new BrowserWindow({width: 800, height: 600})
win.loadURL('file:///path/to/example.asar/static/index.html')
```
### Web API
Webページで、アーカイブ内のファイルを `file:` プロトコルでリクエストできます。
Node API と同様、`asar` アーカイブはディレクトリのように扱われます。
例えば、 `$.get` でファイルを取得できます:
```html
<script>
var $ = require('./jquery.min.js');
$.get('file:///path/to/example.asar/file.txt', (data) => {
console.log(data);
});
</script>
```
### `asar` アーカイブを通常のファイルのように扱う
アーカイブのチェックサムを検証する等の幾つかのケースでは、`asar` アーカイブをファイルとして読み込む必要があります。この目的のために、 `asar` サポートしないオリジナルの `fs` API を提供するビルトインの `original-fs` モジュールを使用できます。
```javascript
const originalFs = require('original-fs')
originalFs.readFileSync('/path/to/example.asar')
```
`process.noAssar``true` をセットしても `fs` モジュールの `asar` サポートを無効にすることができます:
```javascript
process.noAsar = true
fs.readFileSync('/path/to/example.asar')
```
## Node API の制限
Node APIで、`asar` アーカイブが可能な限りディレクトリのように動作するよう懸命に試してますが、低レベル環境での Node API に起因した制限が幾つかあります。
### アーカイブは読み取り専用です
アーカイブは修正できないため、ファイルを変更できる変更できる全ての Node API は `asar` アーカイブに対して動作しません。
### 作業ディレクトリは、アーカイブ内のディレクトリに設定できません
`asar` アーカイブはディレクトリのように扱われるにも関わらず、ファイルシステム上には実際のディレクトリが存在しないため、`asar` アーカイブ内のディレクトリを作業ディレクトリとして設定することはできません。幾つかの API の `cwd` オプションにアーカイブ内のディレクトリを渡すのも同様にエラーの原因になります。
### いくつかのAPIで追加のアンパッキングがされます
たいていの `fs` APIは、アンパッキングせずに、 `asar` アーカイブからファイルを読み込んだり、ファイル情報を取得できます。しかし、システムコールに実際のファイルパスを渡すようになっている幾つかの API では、Electron は必要なファイルを一時ファイルとして抽出し、API に一時ファイルのパスを渡して、API が動作するようにします。このため、当該 API には多少のオーバーヘッドがあります。
追加のアンパッキングに必要なAPIです:
* `child_process.execFile`
* `child_process.execFileSync`
* `fs.open`
* `fs.openSync`
* `process.dlopen` - ネイティブモジュール上の `require` で使用されます
### `fs.stat` の偽の統計情報
`asar` アーカイブ内のファイルはファイルシステム上に存在しないので、`fs.stat` および `asar` アーカイブ内のファイルへの関連情報によって返される`Stats` オブジェクトは、推測して生成されます。ファイルサイズの取得とファイルタイプのチェックを除いて、 `Stats` オブジェクトを信頼すべきではありません。
### `asar` アーカイブ内のバイナリの実行
`child_process.exec``child_process.spawn``child_process.execFile` のようなバイナリを実行できるNode APIがあります。しかし、`execFile` だけが、`asar` アーカイブ内でのバイナリ実行をサポートしています。
なぜならば、`exec` と `spawn` は入力として `file` の代わりに `command` を受け取り、`command` はシェル配下で実行されるからです。コマンドが asar アーカイブ内のファイルを使うかどうかを決定するための信頼できる方法はありませんし、そうするとしてもコマンドで使うファイルパスを副作用なしに置き換えることができるかどうかを確認することはできません。
## `asar` アーカイブ内のファイルをアンパックして追加
上記のように、いくつかのNode APIが呼ばれると、ファイルシステム上にファイルをアンパックしますがパフォーマンス問題は別として、ウィルススキャナーのアラートにつながる可能性があります。
これに対応するために、`--unpack` オプションを使用して、アーカイブを作成する際に、いくつかのファイルをアンパックできます。例えば、ネイティブモジュールの共有ライブラリを除く場合:
```bash
$ asar pack app app.asar --unpack *.node
```
このコマンドを実行した後、`app.asar` とは別に、アンパックされたファイルを含んだ`app.asar.unpacked` フォルダーが生成されます。ユーザーに提供するときには、`app.asar` と一緒にコピーしなければなりません。
[asar]: https://github.com/electron/asar

View file

@ -1,70 +0,0 @@
# メインプロセスのデバッグ
ブラウザウィンドウ DevToolsのみ、レンダリングプロセススクリプトをデバッグすることができます。メインプロセスからスクリプトをデバッグする方法を提供するために、Electronは、`--debug` と `--debug-brk` スイッチを提供します。
## コマンドライン スイッチ
Electronのメインプロセスをデバッグするために次のコマンドラインスイッチを使用します
### `--debug=[port]`
このスイッチを使ったとき、Electronは、 `port` 上でV8デバッガープロトコルメッセージをリッスンします。デフォルトの `port``5858`です。
### `--debug-brk=[port]`
`--debug` のようですが、最初の行でスクリプトをポーズします。
## デバッグ用のnode-inspectorを使用する
__Note:__ Electron は今のところ、明確にはnode-inspectorは動作せず、node-inspectorのコンソール下で、`process` オブジェクトを調査した場合、メインプロセスはクラッシュするでしょう。
### 1. インストールされた[node-gyp required tools][node-gyp-required-tools] を確認する
### 2. [node-inspector][node-inspector]をインストールする
```bash
$ npm install node-inspector
```
### 3. `node-pre-gyp`のパッチバージョンをインストールする
```bash
$ npm install git+https://git@github.com/enlight/node-pre-gyp.git#detect-electron-runtime-in-find
```
### 4. Electron用の `node-inspector` `v8` モジュールをリコンパイルする(対象のElectronのバージョン番号を変更する)
```bash
$ node_modules/.bin/node-pre-gyp --target=0.36.2 --runtime=electron --fallback-to-build --directory node_modules/v8-debug/ --dist-url=https://atom.io/download/electron reinstall
$ node_modules/.bin/node-pre-gyp --target=0.36.2 --runtime=electron --fallback-to-build --directory node_modules/v8-profiler/ --dist-url=https://atom.io/download/electron reinstall
```
[How to install native modules](how-to-install-native-modules)を見る。
### 5. Electron用のデバッグモードを有効にする
デバッグフラッグでElectronを開始する:
```bash
$ electron --debug=5858 your/app
```
または、最初のライン上でスクリプトをポーズする:
```bash
$ electron --debug-brk=5858 your/app
```
### 6. Electronを使用して、[node-inspector][node-inspector] サーバーを開始する
```bash
$ ELECTRON_RUN_AS_NODE=true path/to/electron.exe node_modules/node-inspector/bin/inspector.js
```
### 7. デバッグUIを読み込みます
Chromeブラウザで、 http://127.0.0.1:8080/debug?ws=127.0.0.1:8080&port=5858 を開きます。エントリーラインを見るために、debug-brkを始めるには、ポーズをクリックします。
[node-inspector]: https://github.com/node-inspector/node-inspector
[node-gyp-required-tools]: https://github.com/nodejs/node-gyp#installation
[how-to-install-native-modules]: using-native-node-modules.md#how-to-install-native-modules

View file

@ -1,261 +0,0 @@
# デスクトップ環境の統合
異なるオペレーティングシステムは、それぞれのデスクトップ環境でデスクトップに統合されたアプリケーション用に異なる機能を提供します。例えば、Windows アプリケーションではタスクバーのジャンプバーリストにショートカットをおけ、Macではドックメニューにカスタムメニューをおけます。
このガイドでは、Electron APIでデスクトップ環境にアプリケーションを統合する方法を説明します。
## 通知 (Windows, Linux, macOS)
3つのオペレーティングシステム全てで、アプリケーションからユーザーに通知を送る手段が提供されています。通知を表示するためにオペレーティングシステムのネイティブ通知APIを使用する[HTML5 Notification API](https://notifications.spec.whatwg.org/)で、Electronは、開発者に通知を送ることができます。
**注意:** これはHTML5 APIですので、レンダラプロセス内のみで有効です。
```javascript
let myNotification = new Notification('Title', {
body: 'Lorem Ipsum Dolor Sit Amet'
})
myNotification.onclick = () => {
console.log('Notification clicked')
}
```
オペレーティングシステム間でコードとユーザ体験は似ていますが、細かい違いがあります。
### Windows
* Windows 10では、通知はすぐに動作します。
* Windows 8.1 と Windows 8では、[Application User
Model ID][app-user-model-id]で、アプリへのショートカットはスタートメニューにインストールされます。しかし、スタートメニューにピン止めをする必要がありません。
* Windows 7以前は、通知はサポートされていません。 しかし、[Tray API][tray-balloon]を使用してバルーンヒントを送信することができます。
その上で、bodyの最大サイズは250文字であることに留意してください。Windowsチームは、通知は200文字にすることを推奨しています。
### Linux
通知は、`libnotify`を使用して送信されます。[デスクトップ通知仕様][notification-spec]に対応したデスクトップ環境上Cinnamon、Enlightenment、Unity、GNOME、KDEなどで通知を表示できます。
### macOS
通知は、そのままmacOSに通知されます。しかし、[通知に関するAppleのヒューマンインターフェイスガイドライン英語版](https://developer.apple.com/library/mac/documentation/UserExperience/Conceptual/OSXHIGuidelines/NotificationCenter.html)を知っておくべきです。
通知は、256バイトサイズに制限されており、制限を超えていた場合、通知が破棄されます。
## 最近のドキュメント (Windows と macOS)
Windows と macOSは、ジャンプリストやドックメニュー経由で、アプリケーションが開いた最近のドキュメント一覧に簡単にアクセスできます。
__JumpList:__
![JumpList Recent Files](http://i.msdn.microsoft.com/dynimg/IC420538.png)
__Application dock menu:__
<img src="https://cloud.githubusercontent.com/assets/639601/5069610/2aa80758-6e97-11e4-8cfb-c1a414a10774.png" height="353" width="428" >
最近のドキュメントにファイルを追加するために、[app.addRecentDocument][addrecentdocument] APIを使用できます:
```javascript
app.addRecentDocument('/Users/USERNAME/Desktop/work.type')
```
[app.clearRecentDocuments][clearrecentdocuments] API を使用して、最近のドキュメント一覧を空にできます:
```javascript
app.clearRecentDocuments()
```
### Windows 留意点
Windows で、この機能を使用できるようにするために、アプリケーションにドキュメントのファイルタイプのハンドラーを登録すべきです。さもなければ、ジャンプリストに表示されません。[Application Registration][app-registration]で、登録しているアプリケーションをすべて見れます。
ユーザーがジャンプリストからファイルをクリックしたとき、アプリケーションの新しいインスタンスは、コマンドライン引数にファイルのパスを渡して開始します。
### macOS 留意点
ファイルが最近のドキュメントメニューからリクエストされた時、 `app` モジュールの `open-file` イベントが発行されます。
## ドックメニュー (macOS)のカスタマイズ
通常アプリケーションで使用する共通機能用のショートカットを含める、ドック用のカスタムメニューをmacOSでは指定できます。
__Dock menu of Terminal.app:__
<img src="https://cloud.githubusercontent.com/assets/639601/5069962/6032658a-6e9c-11e4-9953-aa84006bdfff.png" height="354" width="341" >
カスタムドックメニューを設定するために、macOSのみに提供されている `app.dock.setMenu` APIを使用できます。
```javascript
const {app, Menu} = require('electron')
const dockMenu = Menu.buildFromTemplate([
{label: 'New Window', click () { console.log('New Window') }},
{label: 'New Window with Settings',
submenu: [
{label: 'Basic'},
{label: 'Pro'}
]
},
{label: 'New Command...'}
])
app.dock.setMenu(dockMenu)
```
## ユーザータスク (Windows)
Windowsでは、ジャンプリストの `Tasks` カテゴリでカスタムアクションを指定できます。
MSDNから引用します。
>アプリケーションでは、プログラムの機能とユーザーがプログラムを使用して実行する可能性が最も高い主な操作の両方に基づいてタスクを定義します。タスクを実行するためにアプリケーションが起動している必要がないように、タスクは状況に依存しないものにする必要があります。また、タスクは、一般的なユーザーがアプリケーションで実行する操作の中で、統計上最も一般的な操作です。たとえば、メール プログラムでは電子メールの作成や予定表の表示、ワード プロセッサでは新しい文書の作成、特定のモードでのアプリケーションの起動、アプリケーションのサブコマンドを実行することなどです。一般的なユーザーが必要としない高度な機能や、登録などの 1 回限りの操作によって、メニューがわかりづらくなることがないようにしてください。アップグレードやキャンペーンなどの販売促進用の項目としてタスクを使用しないでください。
>タスク一覧は静的なものにすることを強くお勧めします。アプリケーションの状態や状況に関係なく、タスク一覧は同じ状態にすることをお勧めします。リストを動的に変更することも可能ですが、ユーザーはターゲット一覧のこの部分が変更されると考えていないので、ユーザーを混乱させる可能性があることを考慮してください。
__Internet Explorerのタスク:__
![IE](http://i.msdn.microsoft.com/dynimg/IC420539.png)
実際のメニューであるmacOSのドックメニューとは異なり、ユーザーがタスクをクリックしたとき、Windowsではユーザータスクはアプリケーションのショートカットのように動作し、プログラムは指定された引数を実行します。
アプリケーション用のユーザータスクを設定するために、[app.setUserTasks][setusertaskstasks] APIを使用できます:
```javascript
app.setUserTasks([
{
program: process.execPath,
arguments: '--new-window',
iconPath: process.execPath,
iconIndex: 0,
title: 'New Window',
description: 'Create a new window'
}
])
```
タスクリストをクリアするために、`app.setUserTasks` をコールし、配列を空にします。
```javascript
app.setUserTasks([])
```
アプリケーションを閉じた後もユーザータスクは表示されていてるので、アプリケーションをアンインストールするまではタスクに指定したアイコンとプログラムのパスは存在し続けてる必要があります。
## サムネイルツールバー(縮小表示ツールバー)
Windowsでは、アプリケーションウィンドウのタスクバーレイアウトに、指定のボタンを縮小表示ツールバーに追加できます。アプリケーションのウィンドウを元のサイズに戻したりアクティブ化したりすることなく、主要なコマンドにアクセスできるようにします。
MSDNからの引用:
>このツール バーは、単純に、使い慣れた標準的なツール バー コモン コントロールです。最大で 7 個のボタンが配置されます。各ボタンの ID、イメージ、ツールヒント、および状態は構造体で定義され、その後タスク バーに渡されます。アプリケーションでは、現在の状態での必要に応じて、縮小表示ツール バーのボタンの表示、有効化、無効化、非表示を実行できます。
>たとえば、Windows Media Player の縮小表示ツール バーでは、再生、一時停止、ミュート、停止などの、標準的なメディア トランスポート コントロールを提供できます。
__Windows Media Playerの縮小表示ツールバー:__
![player](https://i-msdn.sec.s-msft.com/dynimg/IC420540.png)
アプリケーションに縮小表示ツールバーを設定するために、[BrowserWindow.setThumbarButtons][setthumbarbuttons]を使えます:
```javascript
const {BrowserWindow} = require('electron')
const path = require('path')
let win = new BrowserWindow({
width: 800,
height: 600
})
win.setThumbarButtons([
{
tooltip: 'button1',
icon: path.join(__dirname, 'button1.png'),
click () { console.log('button2 clicked') }
},
{
tooltip: 'button2',
icon: path.join(__dirname, 'button2.png'),
flags: ['enabled', 'dismissonclick'],
click () { console.log('button2 clicked.') }
}
])
```
縮小表示ツールバーボタンをクリアするために、 `BrowserWindow.setThumbarButtons` をコールして配列を空にします:
```javascript
win.setThumbarButtons([])
```
## Unity ランチャーショートカット (Linux)
Unityでは、`.desktop` ファイルの修正を経由してランチャーにカスタムエントリーを追加できます。[Adding Shortcuts to a Launcher][unity-launcher]を参照してください。
__Audaciousのランチャーショートカット:__
![audacious](https://help.ubuntu.com/community/UnityLaunchersAndDesktopFiles?action=AttachFile&do=get&target=shortcuts.png)
## タスクバーの進行状況バー (Windows, macOS, Unity)
Windowsでは、タスクバーボタンは、進行状況バーを表示するのに使えます。ウィンドウを切り替えることなくウィンドウの進行状況情報をユーザーに提供することができます。
macOSではプログレスバーはドックアイコンの一部として表示されます。
Unity DEは、ランチャーに進行状況バーの表示をするのと同様の機能を持っています。
__タスクバーボタン上の進行状況バー:__
![Taskbar Progress Bar](https://cloud.githubusercontent.com/assets/639601/5081682/16691fda-6f0e-11e4-9676-49b6418f1264.png)
ウィンドウに進行状況バーを設定するために、[BrowserWindow.setProgressBar][setprogressbar] APIを使えます:
```javascript
let win = new BrowserWindow()
win.setProgressBar(0.5)
```
## タスクバーでアイコンをオーバーレイする (Windows)
Windowsで、タスクバーボタンはアプリケーションステータスを表示するために小さなオーバーレイを使うことができます。MSDNから引用します。
> アイコン オーバーレイは、状況に応じた状態通知として機能し、通知領域に状態アイコンを個別に表示する必要性をなくして、情報をユーザーに伝えることを目的としています。たとえば、現在、通知領域に表示される Microsoft Office Outlook の新着メールの通知は、タスク バー ボタンのオーバーレイとして表示できるようになります。ここでも、開発サイクルの間に、アプリケーションに最適な方法を決定する必要があります。アイコン オーバーレイは、重要で長期にわたる状態や通知 (ネットワークの状態、メッセンジャーの状態、新着メールなど) を提供することを目的としています。ユーザーに対して、絶えず変化するオーバーレイやアニメーションを表示しないようにしてください。
__タスクバーボタンでのオーバーレイ:__
![Overlay on taskbar button](https://i-msdn.sec.s-msft.com/dynimg/IC420441.png)
ウィンドウでオーバーレイアイコンを設定するために、[BrowserWindow.setOverlayIcon][setoverlayicon] APIを使用できます。
```javascript
let win = new BrowserWindow()
win.setOverlayIcon('path/to/overlay.png', 'Description for overlay')
```
## Windowのファイル表示 (macOS)
macOSでは、ウィンドウがrepresented fileを設定でき、タイトルバー上にファイルのアイコンを表示でき、タイトル上でCommand-クリックまたはControl-クリックをすると、パスがポップアップ表示されます。
ウィンドウの編集状態を設定できるように、このウィンドウのドキュメントが変更されたかどうかをファイルのアイコンで示せます。
__Represented file ポップアップメニュー:__
<img src="https://cloud.githubusercontent.com/assets/639601/5082061/670a949a-6f14-11e4-987a-9aaa04b23c1d.png" height="232" width="663" >
ウィンドウにrepresented fileを設定するために、[BrowserWindow.setRepresentedFilename][setrepresentedfilename] と [BrowserWindow.setDocumentEdited][setdocumentedited] APIsを使えます:
```javascript
let win = new BrowserWindow()
win.setRepresentedFilename('/etc/passwd')
win.setDocumentEdited(true)
```
[addrecentdocument]: ../api/app.md#appaddrecentdocumentpath-os-x-windows
[clearrecentdocuments]: ../api/app.md#appclearrecentdocuments-os-x-windows
[setusertaskstasks]: ../api/app.md#appsetusertaskstasks-windows
[setprogressbar]: ../api/browser-window.md#winsetprogressbarprogress
[setoverlayicon]: ../api/browser-window.md#winsetoverlayiconoverlay-description-windows-7
[setrepresentedfilename]: ../api/browser-window.md#winsetrepresentedfilenamefilename-os-x
[setdocumentedited]: ../api/browser-window.md#winsetdocumenteditededited-os-x
[app-registration]: http://msdn.microsoft.com/en-us/library/windows/desktop/ee872121(v=vs.85).aspx
[unity-launcher]: https://help.ubuntu.com/community/UnityLaunchersAndDesktopFiles#Adding_shortcuts_to_a_launcher
[setthumbarbuttons]: ../api/browser-window.md#winsetthumbarbuttonsbuttons-windows-7
[tray-balloon]: ../api/tray.md#traydisplayballoonoptions-windows
[app-user-model-id]: https://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx
[notification-spec]: https://developer.gnome.org/notification-spec/

View file

@ -1,45 +0,0 @@
# DevTools エクステンション
簡単にデバッグをするために、Electronは[Chrome DevTools Extension][devtools-extension]に基本的な対応しています。
DevToolsエクステンションのために、ソースコードをダウンローし、`BrowserWindow.addDevToolsExtension` APIを使って読み込みます。読み込んだエクステンションは維持されているので、ウィンドウを作成するとき、毎回APIをコールする必要はありません。
** NOTE: React DevTools は動作しません。issue https://github.com/electron/electron/issues/915 をご覧ください **
例えば、[React DevTools Extension](https://github.com/facebook/react-devtools)を使うために、最初にソースコードをダウンロードする必要があります。
```bash
$ cd /some-directory
$ git clone --recursive https://github.com/facebook/react-devtools.git
```
エクステンションをビルドするために、[`react-devtools/shells/chrome/Readme.md`](https://github.com/facebook/react-devtools/blob/master/shells/chrome/Readme.md)を参照してください。
複数のウィンドウで、DevToolsを開くために、Electronでエクステンションをロードし、DevToolsコンソールで次のコードを実行します。
```javascript
const BrowserWindow = require('electron').remote.BrowserWindow
BrowserWindow.addDevToolsExtension('/some-directory/react-devtools/shells/chrome')
```
エクステンションをアンロードするために、`BrowserWindow.removeDevToolsExtension` APIを名前を指定してコールすると、次回DevToolsを開いた時にはロードされません。
```javascript
BrowserWindow.removeDevToolsExtension('React Developer Tools')
```
## DevTools エクステンションのフォーマット
理想的には、Chromeブラウザー用に書かれたすべてのDevToolsエクステンションをElectronがロードできることですが、それらはプレーンディレクトリにある必要があります。`crx` エクステンションパッケージは、ディレクトリに解凍できる方法がなければ、Electronはロードする方法はありません。
## バックグラウンドページ
今のところ、ElectronはChromeエクステンションのバックグラウンドページ機能に対応していません。そのため、Electronでは、この機能に依存するDevToolsエクステンションは動作しません。
## `chrome.*` APIs
いくつかのChromeエクステンションは、`chrome.*` APIsを使用しており、ElectronでそれらのAPIを実装するための努力をしていますが、すべては実装されていません。
すべては実装されていない`chrome.*` APIについて考えると、もしDevToolsエクステンションが `chrome.devtools.*` 以外のAPIを使用していると、エクステンションは動作しない可能性が非常に高いです。うまく動作しないエクステンションがあれば、APIのサポートの追加のために、issue trackerへご報告ください。
[devtools-extension]: https://developer.chrome.com/extensions/devtools

View file

@ -1,11 +0,0 @@
# Electronのバージョン管理
もしあなたが経験豊富なNodeプログラマなら、`semver`(セマンティックバージョニング)のことはご存知でしょうし、バージョン番号をきっちり固定するのではなく、大まかな指針をパッケージの依存管理システムに指定していることと思います。ElectronはNodeとChromiumに強く依存しているので、少し難しい位置付けにあってsemverにきっちり従っていません。そのため、いつでも特定バージョンのElectronを参照しないといけません。
バージョン番号は次のルールに沿ってあげられます。
* メジャーバージョン: ElectronのAPIに大きな変更があった時- 例えば、`0.37.0`から`1.0.0`にアップグレードした時は、あなたはアプリケーションのアップデートをしなければなりません。
* マイナーバージョン: ChromeのメジャーバージョンまたはNodeのマイナーバージョンのアップデート、またはElectronの重大な変更 - 例えば`1.0.0`から`1.1.0`にアップグレードした時は、あなたのアプリは多分動きますが、もしかしたら少々の変更をしないといけないかもしれません。
* パッチ: 新しい機能やバグフィックス - `1.0.0`から`1.0.1`へのアップグレードでは、あなたのアプリはそのまま動くはずです。
もし、`electron-prebuilt`を使用しているのであれば、Electronのすべてのアップデートが開発者であるあなたによって手動で行われることを保証するために、固定バージョンを指定(`^1.1.0`ではなく`1.1.0`)することをお勧めします。

View file

@ -1,89 +0,0 @@
# Keyboard Shortcuts
> ローカル、グローバルのキーボードショートカットを設定します
## ローカルショートカット
[Menu] モジュールの設定により、アプリケーションにフォーカスがあるときのキーボードショートカットを設定できます。
[MenuItem] を作成するときの [`accelerator`] プロパティで設定します。
```js
const {Menu, MenuItem} = require('electron')
const menu = new Menu()
menu.append(new MenuItem({
label: 'Print',
accelerator: 'CmdOrCtrl+P',
click: () => { console.log('time to print stuff') }
}))
```
キーの組み合わせをユーザのOSに基づいて変えることも簡単です。
```js
{
accelerator: process.platform === 'darwin' ? 'Alt+Cmd+I' : 'Ctrl+Shift+I'
}
```
## グローバルショートカット
[globalShortcut] モジュールを使うことで、アプリケーションにフォーカスがないときのキーボードイベントを検知することができます。
```js
const {app, globalShortcut} = require('electron')
app.on('ready', () => {
globalShortcut.register('CommandOrControl+X', () => {
console.log('CommandOrControl+X is pressed')
})
})
```
## BrowserWindow でのキーボードショートカット
もしキーボードショートカットイベントを [BrowserWindow] でハンドリングしたい場合は、rendererプロセスの中でwindowオブジェクトの`keyup` と `keydown` のイベントリスナーを使ってください。
```js
window.addEventListener('keyup', doSomething, true)
```
第3引数にtrueを指定した場合には、リスナーは常に他のリスナーが起動する前にキーイベントを受け取るようになります。そのため、 `stopPropagation()` を呼び出すことができないことに注意してください。
[`before-input-event`](web-contents.md#event-before-input-event) イベントは表示しているページの `keydown` and `keyup` イベントが発生する前に発行されます。
メニューに表示がないショートカットも補足することができます。
もし自前でショートカットキーの判定を実装したくない場合には、[mousetrap] のような高度なキー検出を行うライブラリーがあります。
```js
Mousetrap.bind('4', () => { console.log('4') })
Mousetrap.bind('?', () => { console.log('show shortcuts!') })
Mousetrap.bind('esc', () => { console.log('escape') }, 'keyup')
// combinations
Mousetrap.bind('command+shift+k', () => { console.log('command shift k') })
// map multiple combinations to the same callback
Mousetrap.bind(['command+k', 'ctrl+k'], () => {
console.log('command k or control k')
// return false to prevent default behavior and stop event from bubbling
return false
})
// gmail style sequences
Mousetrap.bind('g i', () => { console.log('go to inbox') })
Mousetrap.bind('* a', () => { console.log('select all') })
// konami code!
Mousetrap.bind('up up down down left right left right b a enter', () => {
console.log('konami code')
})
```
[Menu]: ../api/menu.md
[MenuItem]: ../api/menu-item.md
[globalShortcut]: ../api/global-shortcut.md
[`accelerator`]: ../api/accelerator.md
[BrowserWindow]: ../api/browser-window.md
[mousetrap]: https://github.com/ccampbell/mousetrap

View file

@ -1,153 +0,0 @@
# Mac App Store 提出ガイド
v0.34.0から、ElectronはMac App Store (MAS)にパッケージ化したアプリを登録することができます。このガイドでは、MASビルド用の制限とアプリを登録する方法についての情報を提供します。
__Note:__ Mac App Storeにアプリを登録するには、費用が発生する[Apple Developer Program][developer-program]に登録する必要があります。
## アプリを登録する方法
次の手順は、Mac App Storeにアプリを登録する簡単な手順を説明します。しかし、これらの手順はAppleによってAppが承認されることを保証するものではありません。Mac App Storeの要件については、Appleの[Submitting Your App][submitting-your-app]ガイドを読んでおく必要があります。
### 証明書の取得
Mac App StoreにAppを登録するには、最初にAppleから証明書を取得しなければありません。Web上で、[existing guides][nwjs-guide] を参照してください。
### アプリケーションの署名
Appleから証明書を取得した後、[Application Distribution](application-distribution.md)を参照してアプリをパッケージ化し、アプリに証明をします。この手順は、基本的にほかのプログラムと同じですが、Electronが依存するすべてにつサインします。
最初に、2つの資格ファイルを用意する必要があります。
`child.plist`:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.inherit</key>
<true/>
</dict>
</plist>
```
`parent.plist`:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.application-groups</key>
<array>
<string>your.bundle.id</string>
</array>
</dict>
</plist>
```
_`your.bundle.id`は`Info.plist`で指定されているあなたのアプリのBundle IDに置き換えてください。_
そして、次のスクリプトでアプリを署名します。
```bash
#!/bin/bash
# Name of your app.
APP="YourApp"
# The path of you app to sign.
APP_PATH="/path/to/YouApp.app"
# The path to the location you want to put the signed package.
RESULT_PATH="~/Desktop/$APP.pkg"
# The name of certificates you requested.
APP_KEY="3rd Party Mac Developer Application: Company Name (APPIDENTITY)"
INSTALLER_KEY="3rd Party Mac Developer Installer: Company Name (APPIDENTITY)"
FRAMEWORKS_PATH="$APP_PATH/Contents/Frameworks"
codesign -s "$APP_KEY" -f --entitlements child.plist "$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Electron Framework"
codesign -s "$APP_KEY" -f --entitlements child.plist "$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Libraries/libffmpeg.dylib"
codesign -s "$APP_KEY" -f --entitlements child.plist "$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Libraries/libnode.dylib"
codesign -s "$APP_KEY" -f --entitlements child.plist "$FRAMEWORKS_PATH/Electron Framework.framework"
codesign -s "$APP_KEY" -f --entitlements child.plist "$FRAMEWORKS_PATH/$APP Helper.app/Contents/MacOS/$APP Helper"
codesign -s "$APP_KEY" -f --entitlements child.plist "$FRAMEWORKS_PATH/$APP Helper.app/"
codesign -s "$APP_KEY" -f --entitlements child.plist "$FRAMEWORKS_PATH/$APP Helper EH.app/Contents/MacOS/$APP Helper EH"
codesign -s "$APP_KEY" -f --entitlements child.plist "$FRAMEWORKS_PATH/$APP Helper EH.app/"
codesign -s "$APP_KEY" -f --entitlements child.plist "$FRAMEWORKS_PATH/$APP Helper NP.app/Contents/MacOS/$APP Helper NP"
codesign -s "$APP_KEY" -f --entitlements child.plist "$FRAMEWORKS_PATH/$APP Helper NP.app/"
codesign -s "$APP_KEY" -f --entitlements child.plist "$APP_PATH/Contents/MacOS/$APP"
codesign -s "$APP_KEY" -f --entitlements parent.plist "$APP_PATH"
productbuild --component "$APP_PATH" /Applications --sign "$INSTALLER_KEY" "$RESULT_PATH"
```
macOSでのアプリのサンドボックス化を行うことが初めてなら、Appleの[Enabling App Sandbox][enable-app-sandbox]を通読し、基本的な考え方を確認してから、、エンタイトルメントファイルにアプリに必要なパーミッションキーを追加します。
### Appをアップロードする。
アプリに署名後、iTunes ConnectにアップロードするためにApplication Loaderを使用できます。アップロードする前に[created a record][create-record]を確認してください。
### アプリケーションを審査に提出
これらのステップを終えた後、[レビュー用にアプリを登録できます][submit-for-review].
## MAS Buildの制限
アプリのサンドボックスですべての要件を満たすために、MASビルドで次のモジュールを無効にしてください。
* `crashReporter`
* `autoUpdater`
次の挙動を変更してください。
* ビデオキャプチャーはいくつかのマシンで動作しないかもしれません。
* 一部のアクセシビリティ機能が動作しないことがあります。
* アプリはDNSの変更を認識しません。
アプリのサンドボックスでの使用では、アプリがアクセスできるリソースは厳密に制限されています。詳細は、 [App Sandboxing][app-sandboxing] を参照してください。
## Electronが使用する暗号化アルゴリズム
あなたが住んでいる国や地域に依存して、Mac App Store がアプリで使用する暗号化アルゴリズムを文章化することを要求することがあり、暗号登録番号U.S. Encryption Registration (ERN))の同意のコピーの提出を求められます。
Electron は次の暗号アルゴリズムを使用しています:
* AES - [NIST SP 800-38A](http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf), [NIST SP 800-38D](http://csrc.nist.gov/publications/nistpubs/800-38D/SP-800-38D.pdf), [RFC 3394](http://www.ietf.org/rfc/rfc3394.txt)
* HMAC - [FIPS 198-1](http://csrc.nist.gov/publications/fips/fips198-1/FIPS-198-1_final.pdf)
* ECDSA - ANS X9.622005
* ECDH - ANS X9.632001
* HKDF - [NIST SP 800-56C](http://csrc.nist.gov/publications/nistpubs/800-56C/SP-800-56C.pdf)
* PBKDF2 - [RFC 2898](https://tools.ietf.org/html/rfc2898)
* RSA - [RFC 3447](http://www.ietf.org/rfc/rfc3447)
* SHA - [FIPS 180-4](http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf)
* Blowfish - https://www.schneier.com/cryptography/blowfish/
* CAST - [RFC 2144](https://tools.ietf.org/html/rfc2144), [RFC 2612](https://tools.ietf.org/html/rfc2612)
* DES - [FIPS 46-3](http://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdf)
* DH - [RFC 2631](https://tools.ietf.org/html/rfc2631)
* DSA - [ANSI X9.30](http://webstore.ansi.org/RecordDetail.aspx?sku=ANSI+X9.30-1%3A1997)
* EC - [SEC 1](http://www.secg.org/sec1-v2.pdf)
* IDEA - "On the Design and Security of Block Ciphers" book by X. Lai
* MD2 - [RFC 1319](http://tools.ietf.org/html/rfc1319)
* MD4 - [RFC 6150](https://tools.ietf.org/html/rfc6150)
* MD5 - [RFC 1321](https://tools.ietf.org/html/rfc1321)
* MDC2 - [ISO/IEC 10118-2](https://www.openssl.org/docs/manmaster/crypto/mdc2.html)
* RC2 - [RFC 2268](https://tools.ietf.org/html/rfc2268)
* RC4 - [RFC 4345](https://tools.ietf.org/html/rfc4345)
* RC5 - http://people.csail.mit.edu/rivest/Rivest-rc5rev.pdf
* RIPEMD - [ISO/IEC 10118-3](http://webstore.ansi.org/RecordDetail.aspx?sku=ISO%2FIEC%2010118-3:2004)
ERNの同意を取得するには、 [How to legally submit an app to Apple's App Store when it uses encryption (or how to obtain an ERN)][ern-tutorial]を参照してください。
[developer-program]: https://developer.apple.com/support/compare-memberships/
[submitting-your-app]: https://developer.apple.com/library/mac/documentation/IDEs/Conceptual/AppDistributionGuide/SubmittingYourApp/SubmittingYourApp.html
[nwjs-guide]: https://github.com/nwjs/nw.js/wiki/Mac-App-Store-%28MAS%29-Submission-Guideline#first-steps
[enable-app-sandbox]: https://developer.apple.com/library/ios/documentation/Miscellaneous/Reference/EntitlementKeyReference/Chapters/EnablingAppSandbox.html
[create-record]: https://developer.apple.com/library/ios/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Chapters/CreatingiTunesConnectRecord.html
[submit-for-review]: https://developer.apple.com/library/ios/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Chapters/SubmittingTheApp.html
[app-sandboxing]: https://developer.apple.com/app-sandboxing/
[issue-3871]: https://github.com/electron/electron/issues/3871
[ern-tutorial]: https://carouselapps.com/2015/12/15/legally-submit-app-apples-app-store-uses-encryption-obtain-ern/
[temporary-exception]: https://developer.apple.com/library/mac/documentation/Miscellaneous/Reference/EntitlementKeyReference/Chapters/AppSandboxTemporaryExceptionEntitlements.html

View file

@ -1,81 +0,0 @@
# オンライン/オフライン イベントの検知
オンラインとオフラインイベントの検知は、以下の例で示すように、標準のHTML 5 APIを使用してレンダラプロセスに実装することができます。
_main.js_
```javascript
const electron = require('electron')
const app = electron.app
const BrowserWindow = electron.BrowserWindow
let onlineStatusWindow
app.on('ready', () => {
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false })
onlineStatusWindow.loadURL(`file://${__dirname}/online-status.html`)
})
```
_online-status.html_
```html
<!DOCTYPE html>
<html>
<body>
<script>
const alertOnlineStatus = () => {
window.alert(navigator.onLine ? 'online' : 'offline');
};
window.addEventListener('online', alertOnlineStatus);
window.addEventListener('offline', alertOnlineStatus);
alertOnlineStatus();
</script>
</body>
</html>
```
メインプロセスでこれらのイベントに応答したいことがあるかもしれません。しかし、メインプロセスは `navigator` オブジェクトを持たないため、直接これらのイベントを検知することができません。Electronの inter-process communication ユーティリティを使用して、オンライン・オフラインイベントをメインプロセスに転送し、必要に応じて扱うことができます。次の例を見てみましょう。
_main.js_
```javascript
const electron = require('electron')
const app = electron.app
const ipcMain = electron.ipcMain
const BrowserWindow = electron.BrowserWindow
let onlineStatusWindow
app.on('ready', () => {
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false })
onlineStatusWindow.loadURL(`file://${__dirname}/online-status.html`)
})
ipcMain.on('online-status-changed', (event, status) => {
console.log(status)
})
```
_online-status.html_
```html
<!DOCTYPE html>
<html>
<body>
<script>
const {ipcRenderer} = require('electron');
const updateOnlineStatus = () => {
ipcRenderer.send('online-status-changed', navigator.onLine ? 'online' : 'offline');
};
window.addEventListener('online', updateOnlineStatus);
window.addEventListener('offline', updateOnlineStatus);
updateOnlineStatus();
</script>
</body>
</html>
```

View file

@ -1,187 +0,0 @@
# クイックスタート
Electron ではリッチなネイティブ API を持ったランタイムを提供することによってピュアな JavaScript でデスクトップアプリケーションをつくることができます。ウェブサーバーの代わりにデスクトップアプリケーションに焦点をあてた Node.js ランタイムであるといえばわかりやすいかもしれません。
Electron は JavaScript を GUI ライブラリにバインディングしません。その代わりに、Electron はウェブページを GUI として使用します。なので Electron は JavaScript によってコントロールされる最小のChromium ブラウザでもあるともいえます。
### メインプロセス
Electron では、`package.json` の `main` スクリプトで実行されるプロセスを __メインプロセス__ と呼びます。メインプロセスで実行されるスクリプトがウェブページを作ることによって GUI を表示することができます。
### レンダラープロセス
Electron はウェブページを表示させるために Chromium を使用しているので、Chromium のマルチプロセスアーキテクチャも使用されることになります。Electron で実行されるウェブページはそれぞれ自身のプロセスで実行されます。それを __レンダラープロセス__ と呼びます。
通常のブラウザでは、ウェブページはサンドボックス環境で実行されネイティブなリソースへのアクセスができません。Electron ではウェブページから Node.js の API を使えるためオペレーティングシステムと低レベルなやりとりが可能です。
### メインプロセスとレンダラープロセスの違い
メインプロセスは `BrowserWindow` インスタンスを作ることによってウェブページをつくります。それぞれの `BrowserWindow` インスタンスはそれ自身のレンダラープロセス上でウェブページを実行します。`BrowserWindow` インスタンスが破棄されると、対応するレンダラープロセスも終了されます。
メインプロセスはすべてのウェブページとそれに対応するレンダラープロセスを管理しています。それぞれのレンダラープロセスは隔離されているので、自身の中で実行されているウェブページの面倒だけをみます。
ウェブページでは、GUI 関連の API を呼ぶことはできません。なぜならば、ウェブページからネイティブ GUI リソースを扱うことは非常に危険であり、簡単にリソースをリークしてしまうからです。もしウェブページ内でGUI を操作したい場合には、ウェブページのレンダラープロセスはメインプロセスにそれらの操作をするように伝える必要があります。
Electron では、メインプロセスとレンダラープロセスとのコミュニケーションをするために [ipc](../api/ipc-renderer.md) モジュールを提供しています。またそれと、RPC 形式の通信を行う [remote](../api/remote.md) モジュールもあります。
Electron では、メインプロセスとレンダラープロセスとのコミュニケーションをするには幾つかの方法があります。メッセージを送信する[`ipcRenderer`](../api/ipc-renderer.md)モジュールと[`ipcMain`](../api/ipc-main.md)モジュールのように、RPC 形式の通信を行う[remote](../api/remote.md)モジュールです。[ウェブページ間のデータを共有する方法][share-data]にFAQエントリーがあります。
## Electronアプリを作成する
一般的に Electron アプリの構成は次のようになります:
```text
your-app/
├── package.json
├── main.js
└── index.html
```
`package.json` の形式は Node モジュールとまったく同じです。 `main` フィールドで指定するスクリプトはアプリの起動スクリプトであり、メインプロセスを実行します。 `package.json` の例は次のようになります:
```javascripton
{
"name" : "your-app",
"version" : "0.1.0",
"main" : "main.js"
}
```
__注記__ `package.json``main` が存在しない場合、Electron は `index.js` のロードを試みます。
`main.js` ではウィンドウを作成してシステムイベントを管理します。典型的な例は次のようになります:
```javascript
const electron = require('electron')
// アプリケーションを操作するモジュール
const {app} = electron
// ネイティブブラウザウィンドウを作成するモジュール
const {BrowserWindow} = electron
// ウィンドウオブジェクトをグローバル参照をしておくこと。
// しないと、ガベージコレクタにより自動的に閉じられてしまう。
let win
function createWindow () {
// ブラウザウィンドウの作成
win = new BrowserWindow({width: 800, height: 600})
// アプリケーションのindex.htmlの読み込み
win.loadURL(`file://${__dirname}/index.html`)
// DevToolsを開く
win.webContents.openDevTools()
// ウィンドウが閉じられた時に発行される
win.on('closed', () => {
// ウィンドウオブジェクトを参照から外す。
// もし何個かウィンドウがあるならば、配列として持っておいて、対応するウィンドウのオブジェクトを消去するべき。
win = null
})
}
// このメソッドはElectronが初期化を終えて、ブラウザウィンドウを作成可能になった時に呼び出される。
// 幾つかのAPIはこのイベントの後でしか使えない。
app.on('ready', createWindow)
// すべてのウィンドウが閉じられた時にアプリケーションを終了する。
app.on('window-all-closed', () => {
// macOSでは、Cmd + Q(終了)をユーザーが実行するまではウィンドウが全て閉じられても終了しないでおく。
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
// macOS では、ドックをクリックされた時にウィンドウがなければ新しく作成する。
if (win === null) {
createWindow()
}
})
// このファイルでアプリケーション固有のメインプロセスのコードを読み込むことができる。
// ファイルを別に分けておいてここでrequireすることもできる。
```
最後に、表示するウェブページ `index.html` は次のようになります:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
</head>
<body>
<h1>Hello World!</h1>
We are using node <script>document.write(process.versions.node)</script>,
Chrome <script>document.write(process.versions.chrome)</script>,
and Electron <script>document.write(process.versions.electron)</script>.
</body>
</html>
```
## アプリを実行する
最初の `main.js`、`index.html`、`package.json` を作ったら、手元でアプリを実行し、思った通りに動くのを確認したいでしょう。
### electron-prebuilt
[`electron-prebuilt`](https://github.com/electron-userland/electron-prebuilt)は、コンパイル済みのElectronを含んだ`npm`モジュールです。
`npm`でグローバルインストールをしているなら、下記のコマンドをアプリケーションのソースディレクトリで実行するだけで済みます。
```bash
electron .
```
ローカルにインストールしているなら以下を実行してください:
```bash
./node_modules/.bin/electron .
```
### 手動ダウンロードした Electron バイナリを使う場合
もしも Electron を手動ダウンロードしているなら、同梱されているバイナリであなたのアプリを直接実行できます。
#### Windows
```bash
$ .\electron\electron.exe your-app\
```
#### Linux
```bash
$ ./electron/electron your-app/
```
#### macOS
```bash
$ ./Electron.app/Contents/MacOS/Electron your-app/
```
`Electron.app` は Electron のリリースパッケージの一部で、[ここ](https://github.com/electron/electron/releases) からダウンロードできます。
### Run as a distribution
アプリケーションを作り終えたら、[Application distribution](./application-distribution.md) ガイドにしたがってディストリビューションを作成し、そしてパッケージされたアプリケーションとして実行することが可能です。
### 試してみよう
このチュートリアルのコードは [`atom/electron-quick-start`](https://github.com/electron/electron-quick-start) リポジトリから clone して実行できます。
**注記**:例を試すには、[Git](https://git-scm.com) と [Node.js](https://nodejs.org/en/download/) ([npm](https://npmjs.org) もこれに含まれています) が必要です。
```bash
# Clone the repository
$ git clone https://github.com/electron/electron-quick-start
# Go into the repository
$ cd electron-quick-start
# Install dependencies and run the app
$ npm install && npm start
```
[share-data]: ../faq/electron-faq.md#how-to-share-data-between-web-pages

View file

@ -1,43 +0,0 @@
# セキュリティ・ネイティブ実行で出来ること・あなたの責任
Web開発者として、通常私たちはブラウザの強力なセキュリティ機能の恩恵を受けていますーそのため、書いたコードによる危険性は比較的小さいものです。
ウェブサイトはサンドボックス内で限定された能力のみを使用することが許されていて、また、新しく見つかったセキュリティ脆弱性に素早く対処してくれるたくさんのプログラマチームによって作られたブラウザをユーザーが使ってくれています。
Electronを使用するにあたって、「Electronはウェブブラウザではない」ということを理解するのが大切です。使い慣れたWebテクロジで豊富な機能を持ったデスクトップアプリケーションを作ることができますが、書いたコードはより強力な力を行使することのできるものです。JavaScriptでファイルシステム・シェルなどにアクセスすることができます。これによって、高機能なネイティブアプリケーションを作ることができますが、コードが許された力に比例して、受けるセキュリティリスクも大きいものになります。
そのことを頭に入れて、信頼できないソースから得られた任意の内容を表示することは、Electronが意図しない重要なセキュリティリスクを生み出すことに注意してください。
実際、多くのElectronアプリケーション(Atom, Slack, Visual Studio Code など)は主としてローカルにあるファイルの内容(やNode integration外の信頼できる内容)を表示します。もしアプリケーション上でオンライン上から得られるコードを実行する場合、内容が悪意のあるものでないことを確認するのはあなたの責任です。
# Chromium のセキュリティ問題とアップグレード
Electronは新しいバージョンのChromiumを出来るだけ早くサポートするように努力をしてはいますが、アップグレードは数十、時には数百のファイルの編集を含む大変な左表であることを後理解ください。たくさんのリソースと貢献を受けていますが、ElectronはChromium最新版に追いついてないこともあり、数日・数週間遅れることがあります。
現在のChromiumコンポーネントのアップデートシステムは、使用できるリソースとほとんどのアプリケーションの需要を満たす、適切なバランスの場所にあると思います。我々は、Electronを使用する個々のケースに関する意見をいただきたいと思っています。この件に関するPull requestと貢献をいつでも歓迎します。
## 上記の忠告を無視した場合
リモートで得られたコードをローカルで実行した場合、セキュリティ問題が発生することになります。
例えば、ブラウザでリモートのウェブサイトを表示することを考えてみてください。
もし攻撃者がどうにかして(情報源そのものの攻撃や中間者攻撃によって)得られる内容を変更した場合、ユーザーのPC上でネイティブコードを実行できることになります。
> :warning: Node integration有効な環境で、リモートコードの読み込みと実行を行うべきではありません。代わりに、Nodeコードの実行にはローカルのファイルを使用してください。
リモートのデータの内容を表示するには`webview`を使用して、`nodeIntegration`を無効にしてください。
#### チェックリスト
このリストは、防弾チョッキのように攻撃を防げるものではないですが、最低限あなたがしなければいけないことを記載しています。
* セキュア(https)な内容のみを表示してください。
* リモートの内容を表示する全てのレンダラでNode integrationを無効にしてください (`webPreferences`を使用)
* `webSecurity`を無効にしないください。無効にすると、same-origin policyが無効になります。
* [`Content-Security-Policy`](http://www.html5rocks.com/en/tutorials/security/content-security-policy/)を定義して、スクリプトの読み込み元を制限してください。(例: `script-src 'self'`)
* [`eval`を無効にしてください。](https://github.com/nylas/N1/blob/0abc5d5defcdb057120d726b271933425b75b415/static/index.js#L6) evalは文字列をコードとして実行してしまいます。
* `allowRunningInsecureContent` を有効にしないでください。
* しっかり理解していない限りは`experimentalFeatures`や`experimentalCanvasFeatures`を有効にしないでください。
* しっかり理解していない限りは`blinkFeatures`を有効にしないでください。
* WebView: `nodeintegration`を無効にしてください。
* WebView: `disablewebsecurity`を使用しないでください。
* WebView: `allowpopups`を使用しないでください。
* WebView: `insertCSS`や`executeJavaScript`を外部のCSS/JSに使用しないでください。
再確認ですが、このリストは単にリスクを小さくするもので、リスクをなくすものではありません。もしウェブサイトを表示することが目的なら、ブラウザを使うのがより安全な選択肢です。

View file

@ -1,24 +0,0 @@
# サポートするプラットフォーム
Electronでは次のプラットフォームをサポートします。
### macOS
macOS用に提供しているバイナリは64bitのみで、サポートするmacOSのバージョンは、macOS 10.9 以降です。
### Windows
Windows 7 以降をサポートしており、それ以前のオペレーティングシステムはサポートしていません(し、動作しません)。
`x86``amd64` (x64) の両方のバイナリが、Windows用に提供しています。
ただし、`ARM` バージョンのWindowsは今のところサポートしていません。
### Linux
`ia32`(`i686`) と `x64`(`amd64`) のビルド済みバイナリは、Ubuntu 12.04上でビルドされ、`arm` バイナリは、Debian Wheezy用のhard-float ABIとNEONのARM v7を対象にビルドしています。
Electronはビルドプラットフォームにリンクされているので、ディストリビューションに同梱されているライブラリに依存しているかどうかに関係なくディストリビューション上で動作します。そのため Ubuntu 12.04 のみを動作保証しますが、次のプラットフォームについてもビルド済みのElectronバイナリを実行できるか検証します。
* Ubuntu 12.04 以降
* Fedora 21
* Debian 8

View file

@ -1,43 +0,0 @@
# 継続的インテグレーションシステムによるテスト(Travis CI, Jenkins)
Electron は Chromium を元にしているので、実行にはディスプレイドライバーが必要です。Chromium がディスプレイドライバーを見つけられないと、Electron は起動に失敗してテストの実行ができません。Travis や Circle、 Jenkins などの継続的インテグレーションシステムで Electron アプリをテストするにはちょっとした設定が必要です。端的に言うと仮想ディスプレイドライバーを使用します。
## 仮想ディスプレイサーバーの設定
まず [Xvfb](https://en.wikipedia.org/wiki/Xvfb) をインストールします(リンク先は英語)。Xvfb は X Window System のプロトコルを実装した仮想フレームバッファです。描画系の操作をスクリーン表示無しにメモリ内で行ってくれます。
その後 xvfb の仮想スクリーンを作成して、環境変数 `$DISPLAY` に作成した仮想スクリーンを指定します。Electron の Chromium は自動で`$DISPLAY`を見るので、アプリ側の設定は必要ありません。この手順は Paul Betts 氏が公開しているツール [xvfb-maybe](https://github.com/paulcbetts/xvfb-maybe) によって自動化されています。テスト実行コマンドの前に `xvfb-maybe` を追加するだけで、現在のシステムが必要とする xvfb の設定を自動で行ってくれます。xvfb の設定が必要ない Windows や macOS では何もしません。
```
## Windows や macOS では以下のコマンドは electron-mocha をただ起動するだけです。
## Linux でかつ GUI 環境でない場合、以下のコマンドは
## xvfb-run electron-mocha ./test/*.js と同等になります。
xvfb-maybe electron-mocha ./test/*.js
```
### Travis CI
Travis では `.travis.yml` を以下のようにするといいでしょう。
```yml
addons:
apt:
packages:
- xvfb
install:
- export DISPLAY=':99.0'
- Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
```
### Jenkins
Jenkins では [Xvfb plugin](https://wiki.jenkins-ci.org/display/JENKINS/Xvfb+Plugin) という便利なプラグインが利用可能です(リンク先は英語)。
### Circle CI
Circle CI では、なんと既に xvfb 及び `$DISPLAY` が設定されているので、[何の設定も必要ありません](https://circleci.com/docs/environment#browsers)(リンク先は英語)。
### AppVeyor
AppVeyor は Selenium や Chromium、Electron などをサポートしている Windows 上で動くので、特に設定は必要ありません。

View file

@ -1,50 +0,0 @@
# ネイティブのNodeモジュールを使用する
Electronは、ネイティブのNodeモジュールをサポートしていますが、Node公式とは異なるV8バージョンを使用しているので、ネイティブモジュールでビルドする時、Electronのヘッダーで指定する必要があります。
## ネイティブNodeモジュールとの互換性
Nodeが新しいV8バージョンを使用し始めた時、Nativeモジュールは動作しなくなるかもしれません。ElectronでNativeモジュールが動作するかどうかを確認するために、Electronで使用する内部のNodeバージョンがサポートしているかを確認すべきです。ElectronでNodeが使用しているバージョンを確認するには、[releases](https://github.com/electron/electron/releases)ページを見るか、`process.version` (例えば [Quick Start](https://github.com/electron/electron/blob/master/docs/tutorial/quick-start.md)を見てください)を使用してください。
Nodeの複数バージョンを簡単にサポートできるので、あなたのモジュールに [NAN](https://github.com/nodejs/nan/) を使うことを検討してください。古いバージョンからElectronで動作するNodeの新しいバージョンへ移植するのに役立ちます。
## ネイティブモジュールのインストール方法
ネイティブモジュールをインストールするための3つの方法:
### 簡単な方法
ヘッダーをダウンロードし、ネイティブモジュールをビルドする手順をマニュアルで管理する、[`electron-rebuild`](https://github.com/paulcbetts/electron-rebuild) パッケージ経由で、ネイティブモジュールをリビルドするのが最も簡単な方法です。
```sh
npm install --save-dev electron-rebuild
# Every time you run "npm install", run this
./node_modules/.bin/electron-rebuild
# On Windows if you have trouble, try:
.\node_modules\.bin\electron-rebuild.cmd
```
### npmを使う方法
モジュールをインストールするために`npm` を使用できます。環境変数の設定を除いて、Nodeモジュールと完全に同じ手順です。
```bash
export npm_config_disturl=https://atom.io/download/electron
export npm_config_target=0.33.1
export npm_config_arch=x64
export npm_config_runtime=electron
HOME=~/.electron-gyp npm install module-name
```
### node-gypを使う方法
ElectronのヘッダーでNodeモジュールをビルドするために、どこからヘッダーをダウンロードするかとどのバージョンを使用するかを選択して`node-gyp`を実行する必要があります。
```bash
$ cd /path-to-module/
$ HOME=~/.electron-gyp node-gyp rebuild --target=0.29.1 --arch=x64 --dist-url=https://atom.io/download/electron
```
開発ヘッダーを探し、 `HOME=~/.electron-gyp` を変更します。`--target=0.29.1`がElectronのバージョンです。 `--dist-url=...` で、どこからヘッダーをダウンロードするかを指定します。`--arch=x64`を使用して、64bit システム用にモジュールをビルドします。

View file

@ -1,51 +0,0 @@
# Pepper Flash プラグインを使用する
Electronは、Pepper Flashプラグインをサポートしています。ElectronでPepper Flashプラグインを使用するために、マニュアルでPepper Flashプラグインのパスを指定し、アプリケーションで有効化しなければなりません。
## Flash プラグインのコピー準備
macOSとLinuxでは、Pepper Flashプラグインの詳細は、Chromeブラウザーで、`chrome://plugins` にアクセスして確認できます。そこで表示されるパスとバージョンは、ElectronのPepper Flashサポートに役立ちます。それを別のパスにコピーすることができます。
## Electron スイッチの追加
直接、Electronコマンドラインに`--ppapi-flash-path` と `ppapi-flash-version` を追加するか、 アプリのreadyイベントの前に、`app.commandLine.appendSwitch`メソッドを使用します。`browser-window`の`plugins`スイッチを追加します。
例:
```javascript
// Specify flash path.
// On Windows, it might be /path/to/pepflashplayer.dll
// On macOS, /path/to/PepperFlashPlayer.plugin
// On Linux, /path/to/libpepflashplayer.so
app.commandLine.appendSwitch('ppapi-flash-path', '/path/to/libpepflashplayer.so')
// Specify flash version, for example, v17.0.0.169
app.commandLine.appendSwitch('ppapi-flash-version', '17.0.0.169')
app.on('ready', function () {
mainWindow = new BrowserWindow({
'width': 800,
'height': 600,
'web-preferences': {
'plugins': true
}
})
mainWindow.loadURL(`file://${__dirname}/index.html`)
// Something else
})
```
## `<webview>` タグでFlashプラグインを有効化
`<webview>` タグに`plugins`属性を追加する
```html
<webview src="http://www.adobe.com/software/flash/about/" plugins></webview>
```
## トラブルシューティング
Pepper Flashプラグインが読み込まれているかは、devtoolsのconsoleで`navigator.plugins`を見ることで確認することができます。(プラグインのパスが正しいかがわからなくても)
Pepper FlashプラグインのアーキテクチャはElectronのアーキテクチャと一致している必要があります。Windowsで、64bit Electronに32bit Flashプラグインを使用するのはよくある間違いです。

View file

@ -1,159 +0,0 @@
# Selenium と WebDriverを使用する
[ChromeDriver - WebDriver for Chrome][chrome-driver]より:
> WebDriverは、複数のブラウザ間でWebアプリの自動テストをするためのオープンソースツールです。Webページの移動、ユーザー入力、JavaScriptの実行などを可能にします。ChromeDriverはChromium用のWebDriverのワイヤープロトコルで実装されたスタンドアロンサーバーです。ChromiumとWebDriverチームメンバーが開発しています。
Electronで `chromedriver` を使用するために、Electronがどこにあるかを示し、ElectronはChromeブラウザーであると思わせます。
## Spectronの設定
[Spectron][spectron]はElectronのための公式なChromeDriverテストフレームワークです。
[WebdriverIO](http://webdriver.io/)に基づいてビルドされており、テストの中でElectron APIを使用するヘルパーやChromeDriveを持っています。
```bash
$ npm install --save-dev spectron
```
```javascript
// 可視のウィンドウがタイトル付きで開かれているかを調べる簡単なテスト
var Application = require('spectron').Application
var assert = require('assert')
var app = new Application({
path: '/Applications/MyApp.app/Contents/MacOS/MyApp'
})
app.start().then(function () {
// ウィンドウは表示されている?
return app.browserWindow.isVisible()
}).then(function (isVisible) {
// ウィンドウが表示されているか確認
assert.equal(isVisible, true)
}).then(function () {
// ウィンドウのタイトルを取得
return app.client.getTitle()
}).then(function (title) {
// ウィンドウのタイトルを確認
assert.equal(title, 'My App')
}).then(function () {
// アプリケーションを止める
return app.stop()
}).catch(function (error) {
// 失敗した場合ログを残す
console.error('Test failed', error.message)
})
```
## WebDriverJsを設定
[WebDriverJs](https://code.google.com/p/selenium/wiki/WebDriverJs) は、web driver でテストするためのNodeパッケージを提供します。例のように使用します。
### 1. ChromeDriverを開始
最初に、 `chromedriver` バイナリをダウンロードし、実行します:
```bash
$ ./chromedriver
Starting ChromeDriver (v2.10.291558) on port 9515
Only local connections are allowed.
```
ポート番号 `9515`を覚えておいてください、あとで使用します。
### 2. WebDriverJSのインストール
```bash
$ npm install selenium-webdriver
```
### 3. ChromeDriverに接続する
Electronでの `selenium-webdriver` 使用方法は、chrome driverへの接続方法とElectronバイナリがどこにあるかをマニュアルで指定する以外は、upstreamと基本的に同じです。
```javascript
const webdriver = require('selenium-webdriver')
const driver = new webdriver.Builder()
// The "9515" is the port opened by chrome driver.
.usingServer('http://localhost:9515')
.withCapabilities({
chromeOptions: {
// Here is the path to your Electron binary.
binary: '/Path-to-Your-App.app/Contents/MacOS/Electron'
}
})
.forBrowser('electron')
.build()
driver.get('http://www.google.com')
driver.findElement(webdriver.By.name('q')).sendKeys('webdriver')
driver.findElement(webdriver.By.name('btnG')).click()
driver.wait(function () {
return driver.getTitle().then(function (title) {
return title === 'webdriver - Google Search'
})
}, 1000)
driver.quit()
```
## WebdriverIOのセットアップをする
[WebdriverIO](http://webdriver.io/) は、web driverでテストするNodeパッケージを提供します。
### 1. ChromeDriverを開始する
最初に、 `chromedriver` バイナリをダウンロードし、実行します。:
```bash
$ chromedriver --url-base=wd/hub --port=9515
Starting ChromeDriver (v2.10.291558) on port 9515
Only local connections are allowed.
```
ポート番号 `9515`を覚えておいてください、あとで使用します。
### 2. WebdriverIOをインストールする
```bash
$ npm install webdriverio
```
### 3. chrome driverに接続する
```javascript
const webdriverio = require('webdriverio')
const options = {
host: 'localhost', // Use localhost as chrome driver server
port: 9515, // "9515" is the port opened by chrome driver.
desiredCapabilities: {
browserName: 'chrome',
chromeOptions: {
binary: '/Path-to-Your-App/electron', // Path to your Electron binary.
args: [/* cli arguments */] // Optional, perhaps 'app=' + /path/to/your/app/
}
}
}
let client = webdriverio.remote(options)
client
.init()
.url('http://google.com')
.setValue('#q', 'webdriverio')
.click('#btnG')
.getTitle().then((title) => {
console.log('Title was: ' + title)
})
.end()
```
## ワークフロー
Electronはリビルドせずにアプリケーションをテストするために、単純にElectronのリソースディレクトリでアプリのソースを[配置します](https://github.com/electron/electron/blob/master/docs/tutorial/application-distribution.md)。
もしくは、アプリのフォルダーを引数にしてElectronバイナリを実行します。これによって、Electronのリソースディレクトリにアプリをコピーペーストする必要がなくなります。
[chrome-driver]: https://sites.google.com/a/chromium.org/chromedriver/
[spectron]: https://electron.atom.io/spectron

View file

@ -1,59 +0,0 @@
# Widevine CDM Pluginを使用する
Electronで、Chromeブラウザーに同梱される Widevine CDMプラグインを使用できます。
## プラグインを取得する
Electronは、ライセンス的な理由でWidevine CDMプラグインは同梱されません。Widevine CDMプラグインを取得するために、最初に、使用するElectronビルドのChromeバージョンとアーキテクチャを合わせた公式のChromeブラウザーをインストールする必要があります。
__Note:__ Chromeブラウザのメジャーバージョンは、Electronが使用するChromeバージョンと同じでなければなりません。そうでなければ、プラグインは、`navigator.plugins`経由でロードされて表示されるにも関わらず動作しません。
### Windows & macOS
Chromeブラウザーで、`chrome://components/`を開き、 `WidevineCdm` を探し、それが最新であることを確認し、`APP_DATA/Google/Chrome/WidevineCDM/VERSION/_platform_specific/PLATFORM_ARCH/`ディレクトリからすべてのプラグインバイナリを探します。
`APP_DATA` は、アプリデータを格納するシステムロケーションです。Windowsでは`%LOCALAPPDATA%`、macOSでは`~/Library/Application Support`です。`VERSION` は、Widevine CDM プラグインのバージョン文字列で、 `1.4.8.866`のような文字列が格納されます。`PLATFORM` は、 `mac``win`です。`ARCH` は `x86``x64`です。
Windowsでは、`widevinecdm.dll` と `widevinecdmadapter.dll`が必要で、macOSでは、`libwidevinecdm.dylib` と `widevinecdmadapter.plugin`です。任意の場所にコピーできますが、一緒に配置する必要があります。
### Linux
Linux上では、プラグインバイナリは、Chromeブラウザーにいっほに格納され、 `/opt/google/chrome` 配下にあり、ファイル名は `libwidevinecdm.so``libwidevinecdmadapter.so`です。
## プラグインを使用する
プラグインファイルを取得した後、Electronoの`--widevine-cdm-path`コマンドラインスイッチで`widevinecdmadapter`のパスを指定し、`--widevine-cdm-version`スイッチでプラグインのバージョンを指定します。
__Note:__ `widevinecdmadapter` バイナリはElectronにパスが通っていても`widevinecdm` バイナリはそこに置く必要があります。
コマンドラインスイッチは、`app`モジュールの`ready`イベントが発火する前に通り、プラグインが使用するページは、プラグインを有効にしなければなりません。
サンプルコード:
```javascript
// You have to pass the filename of `widevinecdmadapter` here, it is
// * `widevinecdmadapter.plugin` on macOS,
// * `libwidevinecdmadapter.so` on Linux,
// * `widevinecdmadapter.dll` on Windows.
app.commandLine.appendSwitch('widevine-cdm-path', '/path/to/widevinecdmadapter.plugin')
// The version of plugin can be got from `chrome://plugins` page in Chrome.
app.commandLine.appendSwitch('widevine-cdm-version', '1.4.8.866')
let win = null
app.on('ready', () => {
win = new BrowserWindow({
webPreferences: {
// The `plugins` have to be enabled.
plugins: true
}
})
})
```
## プラグインの検証
プラグインが動作するかどうかを検証するために、次の方法を使用できます。
* devtoolsを開き、Widevine CDMプラグインに`navigator.plugins`が含まれているかどうかを確認します。
* https://shaka-player-demo.appspot.com/ を開き、`Widevine`で使用するマニフェストをロードします。
* http://www.dash-player.com/demo/drm-test-area/を開き、`bitdash uses Widevine in your browser`をチェックし、ビデオを再生します。

View file

@ -1,104 +0,0 @@
반드시 사용하는 Electron 버전과 문서 버전을 일치시켜야 합니다. 버전 숫자는 문서
페이지 URL에 포함되어 있습니다. 만약 그렇지 않다면, 아마 개발 브랜치의 문서일
것이며 당신의 Electron 버전과 호환되지 않는 API 변경을 포함할 것 입니다.
이전 버전 문서는 깃허브에서 [태그로 열어](https://github.com/electron/electron/tree/v1.4.0) 볼 수 있습니다.
"branches/tags 변경" 드롭다운을 열고 해당 버전의 태그를 선택하세요.
**역자주:** 한국어 번역 문서는 `atom.io`에 반영되어 있지 않습니다. 한국어 번역
문서는 현재 `upstream` 원본 문서의 변경에 따라 최대한 문서의 버전을 맞추려고
노력하고 있지만 가끔 누락된 번역이 존재할 수 있습니다.
## FAQ
Electron에 대해 자주 묻는 질문이 있습니다. 이슈를 생성하기 전에 다음 문서를
먼저 확인해 보세요:
* [Electron FAQ](faq.md)
## 개발 가이드
* [지원하는 플랫폼](tutorial/supported-platforms.md)
* [보안](tutorial/security.md)
* [Electron 버전 관리](tutorial/electron-versioning.md)
* [애플리케이션 배포](tutorial/application-distribution.md)
* [Mac 앱스토어 애플리케이션 제출 가이드](tutorial/mac-app-store-submission-guide.md)
* [Windows 스토어 가이드](tutorial/windows-store-guide.md)
* [애플리케이션 패키징](tutorial/application-packaging.md)
* [네이티브 Node 모듈 사용하기](tutorial/using-native-node-modules.md)
* [메인 프로세스 디버깅하기](tutorial/debugging-main-process.md)
* [Selenium 과 WebDriver 사용하기](tutorial/using-selenium-and-webdriver.md)
* [개발자 도구 확장 기능](tutorial/devtools-extension.md)
* [Pepper 플래시 플러그인 사용하기](tutorial/using-pepper-flash-plugin.md)
* [Widevine CDM 플러그인 사용하기](tutorial/using-widevine-cdm-plugin.md)
* [Headless CI 시스템에서 테스팅하기 (Travis, Jenkins)](tutorial/testing-on-headless-ci.md)
* [오프 스크린 렌더링](tutorial/offscreen-rendering.md)
## 튜토리얼
* [시작하기](tutorial/quick-start.md)
* [데스크톱 환경 통합](tutorial/desktop-environment-integration.md)
* [온/오프라인 이벤트 감지](tutorial/online-offline-events.md)
* [REPL](tutorial/repl.md)
## API 레퍼런스
* [개요](api/synopsis.md)
* [Process 객체](api/process.md)
* [크롬 명령줄 스위치 지원](api/chrome-command-line-switches.md)
* [환경 변수](api/environment-variables.md)
### 커스텀 DOM 요소:
* [`File` 객체](api/file-object.md)
* [`<webview>` 태그](api/webview-tag.md)
* [`window.open` 함수](api/window-open.md)
### 메인 프로세스에서 사용할 수 있는 모듈:
* [app](api/app.md)
* [autoUpdater](api/auto-updater.md)
* [BrowserWindow](api/browser-window.md)
* [contentTracing](api/content-tracing.md)
* [dialog](api/dialog.md)
* [globalShortcut](api/global-shortcut.md)
* [ipcMain](api/ipc-main.md)
* [Menu](api/menu.md)
* [MenuItem](api/menu-item.md)
* [net](api/net.md)
* [powerMonitor](api/power-monitor.md)
* [powerSaveBlocker](api/power-save-blocker.md)
* [protocol](api/protocol.md)
* [session](api/session.md)
* [systemPreferences](api/system-preferences.md)
* [Tray](api/tray.md)
* [webContents](api/web-contents.md)
### 렌더러 프로세스에서 사용할 수 있는 모듈 (웹 페이지):
* [desktopCapturer](api/desktop-capturer.md)
* [ipcRenderer](api/ipc-renderer.md)
* [remote](api/remote.md)
* [webFrame](api/web-frame.md)
### 두 프로세스 모두 사용할 수 있는 모듈:
* [clipboard](api/clipboard.md)
* [crashReporter](api/crash-reporter.md)
* [nativeImage](api/native-image.md)
* [screen](api/screen.md)
* [shell](api/shell.md)
## 개발자용
* [코딩 스타일](development/coding-style.md)
* [C++ 코드에서 clang-format 사용하기](development/clang-format.md)
* [소스 코드 디렉터리 구조](development/source-code-directory-structure.md)
* [NW.js(node-webkit)와 기술적으로 다른점](development/atom-shell-vs-node-webkit.md)
* [빌드 시스템 개요](development/build-system-overview.md)
* [빌드 설명서 (macOS)](development/build-instructions-osx.md)
* [빌드 설명서 (Windows)](development/build-instructions-windows.md)
* [빌드 설명서 (Linux)](development/build-instructions-linux.md)
* [디버그 설명서 (macOS)](development/debug-instructions-macos.md)
* [디버그 설명서 (Windows)](development/debug-instructions-windows.md)
* [디버거 심볼 서버 설정](development/setting-up-symbol-server.md)
* [문서 스타일가이드](styleguide.md)

View file

@ -1,73 +0,0 @@
# Accelerator
> 키보드 단축키를 정의합니다.
프로세스: [메인](../tutorial/quick-start.md#main-process)
Accelerator 는 `+` 문자로 결합된 여러 수식어와 키 코드를 포함할 수 있는
문자열입니다. 그리고 애플리케이션의 키보드 단축키를 정의하는데 사용됩니다.
예시:
* `CommandOrControl+A`
* `CommandOrControl+Shift+Z`
단축키는 [`globalShortcut`](global-shortcut.md) 모듈의
[`register`](global-shortcut.md#globalshortcutregisteraccelerator-callback)
메소드로 등록됩니다. 예시:
```javascript
const {app, globalShortcut} = require('electron')
app.on('ready', () => {
// '커맨드 또는 컨트롤+Y' 단축키 리스너 등록.
globalShortcut.register('CommandOrControl+Y', () => {
// 커맨드/컨트롤과 Y 가 눌렸을 때 할 동작.
})
})
```
## 플랫폼에 관련하여 주의할 점
Linux와 Windows에서는 `Command`키가 없으므로 작동하지 않습니다. 대신에
`CommandOrControl`을 사용하면 macOS의 `Command`와 Linux, Windows의 `Control` 모두
지원할 수 있습니다.
`Option` 대신 `Alt`을 사용하는게 좋습니다. `Option` 키는 macOS에만 있으므로
모든 플랫폼에서 사용할 수 있는 `Alt` 키를 권장합니다.
`Super`키는 Windows와 Linux 에서는 `윈도우`키를, macOS에서는 `Cmd`키로 맵핑됩니다.
## 사용 가능한 혼합키
* `Command` (단축어 `Cmd`)
* `Control` (단축어 `Ctrl`)
* `CommandOrControl` (단축어 `CmdOrCtrl`)
* `Alt`
* `Option`
* `AltGr`
* `Shift`
* `Super`
## 사용 가능한 전체 키코드
* `0` 부터 `9` 까지
* `A` 부터 `Z` 까지
* `F1` 부터 `F24` 까지
* `~`, `!`, `@`, `#`, `$`, etc 와 같은 구두점 기호들
* `Plus`
* `Space`
* `Tab`
* `Backspace`
* `Delete`
* `Insert`
* `Return` (또는 `Enter`)
* `Up`, `Down`, `Left``Right`
* `Home` 그리고 `End`
* `PageUp` 그리고 `PageDown`
* `Escape` (단축어 `Esc`)
* `VolumeUp`, `VolumeDown` 그리고 `VolumeMute`
* `MediaNextTrack`, `MediaPreviousTrack`, `MediaStop` 그리고 `MediaPlayPause`
* `PrintScreen`
__키코드는 `단축어`로도 사용할 수 있습니다__

View file

@ -1,944 +0,0 @@
# app
> 애플리케이션의 이벤트 생명주기를 제어합니다.
프로세스: [메인](../tutorial/quick-start.md#main-process)
밑의 예시는 마지막 윈도우가 종료되었을 때, 애플리케이션을 종료시키는 예시입니다:
```javascript
const {app} = require('electron')
app.on('window-all-closed', () => {
app.quit()
})
```
## Events
`app` 객체는 다음과 같은 이벤트를 가지고 있습니다:
### Event: 'will-finish-launching'
애플리케이션이 기본적인 시작 준비를 마치면 발생하는 이벤트입니다.
Windows, Linux 운영체제에서의 `will-finish-launching` 이벤트는 `ready` 이벤트와
동일합니다. macOS에서의 이벤트는 `NSApplication`
`applicationWillFinishLaunching`에 대한 알림으로 표현됩니다. 대개 이곳에서
`open-file``open-url` 이벤트 리스너를 설정하고 crash reporter와 auto updater를
시작합니다.
대부분의 경우, 모든 것을 `ready` 이벤트 핸들러 안에서 해결해야 합니다.
### Event: 'ready'
Returns:
* `launchInfo` Object _macOS_
Electron이 초기화를 끝냈을 때 발생하는 이벤트입니다.
### Event: 'window-all-closed'
모든 윈도우가 종료되었을 때 발생하는 이벤트입니다.
만약 이 이벤트를 구독하지 않은 상태로 모든 윈도우가 닫혔을 때의 기본 동작은 앱을
종료하는 것입니다. 하지만, 이 이벤트를 구독하면, 앱을 종료할지 다른 일을 할지 제어할
수 있습니다. 만약 사용자가 `Cmd + Q`를 입력했거나 개발자가 `app.quit()`를 호출했다면,
Electron은 먼저 모든 윈도우의 종료를 시도하고 `will-quit` 이벤트를 발생시킵니다.
그리고 `will-quit` 이벤트가 발생했을 땐 `window-all-closed` 이벤트가 발생하지
않습니다.
**역자주:** 이 이벤트는 말 그대로 현재 애플리케이션에서 윈도우만 완전히 종료됬을 때
발생하는 이벤트입니다. 따라서 애플리케이션을 완전히 종료하려면 이 이벤트에서
`app.quit()`를 호출해 주어야 합니다.
### Event: 'before-quit'
Returns:
* `event` Event
애플리케이션 윈도우들이 닫히기 시작할 때 발생하는 이벤트입니다.
`event.preventDefault()` 호출은 이벤트의 기본 동작을 방지하기 때문에
이를 통해 애플리케이션의 종료를 방지할 수 있습니다.
### Event: 'will-quit'
Returns:
* `event` Event
모든 윈도우들이 종료되고 애플리케이션이 종료되기 시작할 때 발생하는 이벤트입니다.
`event.preventDefault()` 호출을 통해 애플리케이션의 종료를 방지할 수 있습니다.
`will-quit``window-all-closed` 이벤트의 차이점을 확인하려면 `window-all-closed`
이벤트의 설명을 참고하세요.
### Event: 'quit'
Returns:
* `event` Event
* `exitCode` Integer
애플리케이션이 종료될 때 발생하는 이벤트입니다.
### Event: 'open-file' _macOS_
Returns:
* `event` Event
* `path` String
사용자가 애플리케이션을 통해 파일을 열고자 할 때 발생하는 이벤트입니다.
`open-file` 이벤트는 보통 애플리케이션이 열려 있을 때 OS가 파일을 열기 위해
애플리케이션을 재사용할 때 발생합니다. 이 이벤트는 파일을 dock에 떨어트릴 때,
애플리케이션이 실행되기 전에도 발생합니다. 따라서 이 이벤트를 제대로 처리하려면
`open-file` 이벤트 핸들러를 애플리케이션이 시작하기 전에 등록해 놓았는지 확실히
확인해야 합니다. (`ready` 이벤트가 발생하기 전에)
이 이벤트를 처리할 땐 반드시 `event.preventDefault()`를 호출해야 합니다.
Windows에선 `process.argv` (메인 프로세스에서)를 통해 파일 경로를 얻을 수 있습니다.
### Event: 'open-url' _macOS_
Returns:
* `event` Event
* `url` String
유저가 애플리케이션을 통해 URL을 열고자 할 때 발생하는 이벤트입니다.
애플리케이션에서 URL을 열기 위해 반드시 URL 스킴이 등록되어 있어야 합니다.
이 이벤트를 처리할 땐 반드시 `event.preventDefault()`를 호출해야 합니다.
### Event: 'activate' _macOS_
Returns:
* `event` Event
* `hasVisibleWindows` Boolean
애플리케이션이 활성화 되었을 때 발생하는 이벤트입니다. 이 이벤트는 사용자가
애플리케이션의 dock 아이콘을 클릭했을 때 주로 발생합니다.
### Event: 'continue-activity' _macOS_
Returns:
* `event` Event
* `type` String - Activity를 식별하는 문자열.
[`NSUserActivity.activityType`][activity-type]을 맵핑합니다.
* `userInfo` Object - 다른 기기의 activity에서 저장된 앱-특정 상태를 포함합니다.
다른 기기에서 받아온 activity를 재개하려고 할 때 [Handoff][handoff] 하는 동안
발생하는 이벤트입니다. 이 이벤트를 처리하려면 반드시 `event.preventDefault()`
호출해야 합니다.
사용자 activity는 activity의 소스 애플리케이션과 같은 개발자 팀 ID를 가지는
애플리케이션 안에서만 재개될 수 있고, activity의 타입을 지원합니다. 지원하는
activity의 타입은 애플리케이션 `Info.plist``NSUserActivityTypes` 키에 열거되어
있습니다.
### Event: 'browser-window-blur'
Returns:
* `event` Event
* `window` BrowserWindow
[browserWindow](browser-window.md)에 대한 포커스가 사라졌을 때 발생하는 이벤트입니다.
### Event: 'browser-window-focus'
Returns:
* `event` Event
* `window` BrowserWindow
[browserWindow](browser-window.md)에 대한 포커스가 발생했을 때 발생하는 이벤트입니다.
**역자주:** _포커스_ 는 창을 클릭해서 활성화 시켰을 때를 말합니다.
### Event: 'browser-window-created'
Returns:
* `event` Event
* `window` BrowserWindow
새로운 [browserWindow](browser-window.md)가 생성되었을 때 발생하는 이벤트입니다.
### Event: 'web-contents-created'
Returns:
* `event` Event
* `webContents` WebContents
새로운 [webContents](web-contents.md)가 생성되었을 때 발생하는 이벤트입니다.
### Event: 'certificate-error'
Returns:
* `event` Event
* `webContents` [WebContents](web-contents.md)
* `url` URL
* `error` String - 에러 코드
* `certificate` [Certificate](structures/certificate.md)
* `callback` Function
* `isTrusted` Boolean - 인증서를 신뢰할지 여부
`url`에 대한 `certificate` 인증서의 유효성 검증에 실패했을 때 발생하는 이벤트입니다.
인증서를 신뢰한다면 `event.preventDefault()``callback(true)`를 호출하여
기본 동작을 방지하고 인증을 승인할 수 있습니다.
```javascript
const {app} = require('electron')
app.on('certificate-error', (event, webContents, url, error, certificate, callback) => {
if (url === 'https://github.com') {
// 확인 로직.
event.preventDefault()
callback(true)
} else {
callback(false)
}
})
```
### Event: 'select-client-certificate'
Returns:
* `event` Event
* `webContents` [WebContents](web-contents.md)
* `url` URL
* `certificateList` [Certificate[]](structures/certificate.md)
* `callback` Function
* `certificate` [Certificate](structures/certificate.md)
클라이언트 인증이 요청되었을 때 발생하는 이벤트입니다.
`url`은 클라이언트 인증서를 요청하는 탐색 항목에 해당합니다.
그리고 `callback`은 목록에서 필터링된 항목과 함께 호출될 필요가 있습니다.
이 이벤트에서의 `event.preventDefault()` 호출은 초기 인증 때 저장된 데이터를 사용하는
것을 막습니다.
```javascript
const {app} = require('electron')
app.on('select-client-certificate', (event, webContents, url, list, callback) => {
event.preventDefault()
callback(list[0])
})
```
### Event: 'login'
Returns:
* `event` Event
* `webContents` [WebContents](web-contents.md)
* `request` Object
* `method` String
* `url` URL
* `referrer` URL
* `authInfo` Object
* `isProxy` Boolean
* `scheme` String
* `host` String
* `port` Integer
* `realm` String
* `callback` Function
* `username` String
* `password` String
`webContents`가 기본 인증을 요청할 때 발생하는 이벤트입니다.
기본 동작은 인증 요청을 모두 취소시킵니다.
동작을 새로 정의하려면 반드시 `event.preventDefault()`를 호출한 후
`callback(username, password)` 형태의 콜백을 호출하여 인증을 처리해야 합니다.
```javascript
const {app} = require('electron')
app.on('login', (event, webContents, request, authInfo, callback) => {
event.preventDefault()
callback('username', 'secret')
})
```
### Event: 'gpu-process-crashed'
Returns:
* `event` Event
* `killed` Boolean
GPU 처리가 충돌하거나 종료되었을 때 발생하는 이벤트입니다.
### Event: 'accessibility-support-changed' _macOS_ _Windows_
Returns:
* `event` Event
* `accessibilitySupportEnabled` Boolean - Chrome의 접근성 지원이 활성화되어있으면
`true`를 반환하고 아니라면 `false`를 반환합니다.
Chrome의 접근성 지원이 변경될 때 발생하는 이벤트입니다. 이 이벤트는 스크린 리더와 같은
접근성 기술이 활성화되거나 비활성화될 때 발생합니다.
자세한 내용은 https://www.chromium.org/developers/design-documents/accessibility 를
참고하세요.
## Methods
`app` 객체는 다음과 같은 메서드를 가지고 있습니다:
**참고:** 몇몇 메서드는 특정 플랫폼에서만 작동합니다.
### `app.quit()`
모든 윈도우 종료를 시도합니다. `before-quit` 이벤트가 먼저 발생합니다.
모든 윈도우가 성공적으로 종료되면 `will-quit` 이벤트가 발생하고 기본 동작에 따라
애플리케이션이 종료됩니다.
이 함수는 모든 `beforeunload``unload` 이벤트 핸들러가 제대로 실행됨을 보장합니다.
`beforeunload` 이벤트 핸들러에서 `false`를 반환했을 때 윈도우 종료가 취소 될 수
있습니다.
### `app.exit(exitCode)`
* `exitCode` Integer
`exitCode`와 함께 애플리케이션을 즉시 종료합니다.
모든 윈도우는 사용자의 동의 여부에 상관없이 즉시 종료되며 `before-quit` 이벤트와
`will-quit` 이벤트가 발생하지 않습니다.
### `app.relaunch([options])`
* `options` Object (optional)
* `args` String[] (optional)
* `execPath` String (optional)
현재 인스턴스가 종료되면 애플리케이션을 재시작합니다.
기본적으로 새 인스턴스는 같은 작업 디렉토리의 것과 함께 현재 인스턴스의 명령줄 인수를
사용합니다. 만약 `args`가 지정되면, `args`가 기본 명령줄 인수 대신에 전달됩니다.
`execPath`가 지정되면, 현재 애플리케이션 대신 `execPath`가 실행됩니다.
참고로 이 메서드는 애플리케이션을 종료하지 않으며, 애플리케이션을 다시 시작시키려면
`app.relaunch`를 호출한 후 `app.quit` 또는 `app.exit`를 실행해주어야 합니다.
`app.relaunch`가 여러 번 호출되면, 현재 인스턴스가 종료된 후 여러 인스턴스가
시작됩니다.
다음은 현재 인스턴스를 즉시 종료시킨 후 새로운 명령줄 인수를 추가하여 새
인스턴스의 애플리케이션을 실행하는 예시입니다:
```javascript
const {app} = require('electron')
app.relaunch({args: process.argv.slice(1).concat(['--relaunch'])})
app.exit(0)
```
### `app.isReady()`
Returns `Boolean` - Electron 이 초기화를 마쳤으면 `true`, 아니면 `false`.
### `app.focus()`
Linux에선, 첫 번째로 보여지는 윈도우가 포커스됩니다. macOS에선, 애플리케이션을 활성화
앱 상태로 만듭니다. Windows에선, 애플리케이션의 첫 윈도우에 포커스 됩니다.
### `app.hide()` _macOS_
최소화를 하지 않고 애플리케이션의 모든 윈도우들을 숨깁니다.
### `app.show()` _macOS_
숨긴 애플리케이션 윈도우들을 다시 보이게 만듭니다. 자동으로 포커스되지 않습니다.
### `app.getAppPath()`
Returns `String` - 현재 애플리케이션 디렉토리.
### `app.getPath(name)`
* `name` String
Returns `String` -`name` 에 관련한 특정 디렉터리 또는 파일의 경로. 실패시
`Error` 발생.
**역자주:** 이 메서드는 운영체제에서 지정한 특수 디렉터리를 가져오는데 사용할 수 있습니다.
`name`은 다음 목록에 있는 경로 중 하나를 선택해 사용할 수 있습니다:
* `home` - 사용자의 홈 디렉터리.
* `appData` - 각 사용자의 애플리케이션 데이터 디렉터리. 기본 경로는 다음과 같습니다:
* `%APPDATA%` - Windows
* `$XDG_CONFIG_HOME` 또는 `~/.config` - Linux
* `~/Library/Application Support` - macOS
* `userData` - 애플리케이션의 설정을 저장하는 디렉터리.
이 디렉터리는 기본적으로 `appData`에 애플리케이션 이름으로 생성된 폴더가 지정됩니다.
* `temp` - 임시 폴더 디렉터리.
* `exe` - 현재 실행중인 Electron 바이너리 파일.
* `module` - `libchromiumcontent` 라이브러리.
* `desktop` - 사용자의 데스크탑 디렉터리.
* `documents` - 사용자의 "내 문서" 디렉터리.
* `downloads` - 사용자의 다운로드 디렉터리.
* `music` - 사용자의 음악 디렉터리.
* `pictures` - 사용자의 사진 디렉터리.
* `videos` - 사용자의 동영상 디렉터리.
* `pepperFlashSystemPlugin` - 시스템 버전의 Pepper Flash 플러그인의 전체 경로.
### `app.setPath(name, path)`
* `name` String
* `path` String
`name`에 대한 특정 디렉터리나 파일의 경로인 `path`를 재정의합니다.
만약 지정한 디렉터리의 경로가 존재하지 않으면 디렉터리가 이 메서드를 통해 새로
생성됩니다. 재정의에 실패했을 땐 `Error`를 반환합니다.
이 메서드는 `app.getPath`에 정의되어 있는 `name`의 경로만 재정의할 수 있습니다.
기본적으로, 웹 페이지의 쿠키와 캐시는 `userData` 디렉터리에 저장됩니다.
만약 이 위치를 변경하고자 한다면, 반드시 `app` 모듈의 `ready` 이벤트가 발생하기 전에
`userData` 경로를 재정의해야 합니다.
### `app.getVersion()`
Returns `String` - 로드된 애플리케이션의 버전. 만약 `package.json` 파일에서
애플리케이션의 버전을 찾을 수 없는 경우, 현재 번들 또는 실행 파일의 버전을
반환합니다.
### `app.getName()`
Returns `String` - `package.json` 에 기술된 현재 애플리케이션의 이름.
npm 모듈 규칙에 따라 대부분의 경우 `package.json``name` 필드는 소문자 이름을
사용합니다. 하지만 Electron은 `name`대신 `productName` 필드를 주로 사용하기 때문에
반드시 이 필드도 같이 지정해야 합니다. 이 필드는 맨 앞글자가 대문자인 애플리케이션
전체 이름을 지정해야 합니다.
### `app.setName(name)`
* `name` String
현재 애플리케이션의 이름을 덮어씌웁니다.
### `app.getLocale()`
Returns `String` - 현재 애플리케이션의
[로케일](https://ko.wikipedia.org/wiki/%EB%A1%9C%EC%BC%80%EC%9D%BC). 반환될 수
있는 값은 [여기](locales.md)에서 찾아볼 수 있습니다.
**참고:** 패키징된 앱을 배포할 때, `locales` 폴더도 같이 배포해야 합니다.
**참고:** Windows에선 `ready` 이벤트가 발생한 이후에 이 메서드를 호출해야 합니다.
### `app.addRecentDocument(path)` _macOS_ _Windows_
* `path` String
최근 문서 목록에 `path`를 추가합니다.
이 목록은 OS에 의해 관리됩니다. 최근 문서 목록은 Windows의 경우 작업 표시줄에서 찾을
수 있고, macOS의 경우 dock 메뉴에서 찾을 수 있습니다.
### `app.clearRecentDocuments()` _macOS_ _Windows_
최근 문서 목록을 모두 비웁니다.
### `app.setAsDefaultProtocolClient(protocol[, path, args])` _macOS_ _Windows_
* `protocol` String - 프로토콜의 이름, `://` 제외. 만약 앱을 통해 `electron://`
같은 링크를 처리하고 싶다면, 이 메서드에 `electron` 인수를 담아 호출하면 됩니다.
* `path` String (optional) _Windows_ - 기본값은 `process.execPath`입니다.
* `args` String[] (optional) _Windows_ - 기본값은 빈 배열입니다.
Returns `Boolean` - 호출 성공 여부.
이 메서드는 지정한 프로토콜(URI scheme)에 대해 현재 실행파일을 기본 핸들러로
등록합니다. 이를 통해 운영체제와 더 가깝게 통합할 수 있습니다. 한 번 등록되면,
`your-protocol://`과 같은 모든 링크에 대해 호출시 현재 실행 파일이 실행됩니다.
모든 링크, 프로토콜을 포함하여 애플리케이션의 인수로 전달됩니다.
Windows에선 실행시에 선택적 매개변수를 통해 경로, 실행 파일, 인수, 실행 파일로 전달될
인수의 배열을 제공할 수 있습니다.
**참고:** macOS에선, 애플리케이션의 `info.plist`에 등록해둔 프로토콜만 사용할 수
있습니다. 이는 런타임에서 변경될 수 없습니다. 이 파일은 간단히 텍스트 에디터를
사용하거나, 애플리케이션을 빌드할 때 스크립트가 생성되도록 할 수 있습니다. 자세한
내용은 [Apple의 참조 문서][CFBundleURLTypes]를 확인하세요.
이 API는 내부적으로 Windows 레지스트리와 LSSetDefaultHandlerForURLScheme를 사용합니다.
호출에 성공하면 `true`를 반환하고 그렇지 않다면 `false`를 반환합니다.
### `app.removeAsDefaultProtocolClient(protocol[, path, args])` _macOS_ _Windows_
* `protocol` String - 프로토콜의 이름, `://` 제외.
* `path` String (optional) _Windows_ - 기본값은 `process.execPath`
* `args` String[] (optional) _Windows_ - 기본값은 빈 배열
Returns `Boolean` - 호출 성공 여부.
이 메서드는 현재 실행파일이 지정한 프로토콜(URI scheme)에 대해 기본 핸들러인지를
확인합니다. 만약 그렇다면, 이 메서드는 앱을 기본 핸들러에서 제거합니다.
### `app.isDefaultProtocolClient(protocol[, path, args])` _macOS_ _Windows_
* `protocol` String - `://`를 제외한 프로토콜의 이름.
* `path` String (optional) _Windows_ - 기본값은 `process.execPath`
* `args` String[] (optional) _Windows_ - 기본값은 빈 배열
Returns `Boolean`
이 메서드는 현재 실행 파일이 지정한 프로토콜에 대해 기본 동작인지 확인합니다.
(URI 스킴) 만약 그렇다면 `true`를 반환하고 아닌 경우 `false`를 반환합니다.
**참고:** macOS에선, 응용 프로그램이 프로토콜에 대한 기본 프로토콜 동작으로
등록되었는지를 확인하기 위해 이 메서드를 사용할 수 있습니다. 또한 macOS에서
`~/Library/Preferences/com.apple.LaunchServices.plist`를 확인하여 검증할 수도
있습니다. 자세한 내용은 [Apple의 참조 문서][LSCopyDefaultHandlerForURLScheme]를
참고하세요.
이 API는 내부적으로 Windows 레지스트리와 LSSetDefaultHandlerForURLScheme를 사용합니다.
### `app.setUserTasks(tasks)` _Windows_
* `tasks` [Task[]](structures/task.md) - `Task` 객체의 배열
Windows에서 사용할 수 있는 JumpList의 [Tasks][tasks] 카테고리에 `task`를 추가합니다.
`tasks`는 다음과 같은 구조를 가지는 `Task` 객체의 배열입니다:
`Task` Object:
* `program` String - 실행할 프로그램의 경로.
보통 현재 작동중인 애플리케이션의 경로인 `process.execPath`를 지정합니다.
* `arguments` String - `program`이 실행될 때 사용될 명령줄 인수.
* `title` String - JumpList에 표시할 문자열.
* `description` String - 이 작업에 대한 설명.
* `iconPath` String - JumpList에 표시될 아이콘의 절대 경로. 아이콘을 포함하고
있는 임의의 리소스 파일을 사용할 수 있습니다. 보통 애플리케이션의 아이콘을
그대로 사용하기 위해 `process.execPath`를 지정합니다.
* `iconIndex` Integer - 아이콘 파일의 인덱스. 만약 아이콘 파일이 두 개 이상의
아이콘을 가지고 있을 경우, 사용할 아이콘의 인덱스를 이 옵션으로 지정해 주어야
합니다. 단, 아이콘을 하나만 포함하고 있는 경우 0을 지정하면 됩니다.
Returns `Boolean` - 호출 성공 여부.
**참고:** 점프 목록을 커스터마이징 하려면 대신 `app.setJumpList(categories)`
사용하세요.
### `app.getJumpListSettings()` _Windows_
Returns `Object`:
* `minItems` Integer - 점프 목록에서 보여질 항목의 최소 수 (이 값에 대한 자세한
설명은 [MSDN 문서][JumpListBeginListMSDN])를 보세요.
* `removedItems` [JumpListItem[]](structures/jump-list-item.md) - 점프 목록의 사용자 정의 카테고리에서 사용자가 삭제한
항목에 해당하는 `JumpListItem` 객체 배열. 이 항목들은 **다음**
`app.setJumpList()` 호출로 다시 추가하면 안됩니다. 윈도우는 삭제된 항목을
포함하는 카테고리를 표시하지 않을 것 입니다.
### `app.setJumpList(categories)` _Windows_
* `categories` [JumpListCategory[]](structures/jump-list-category.md) or `null` - `JumpListCategory` 객체의 배열.
애플리케이션에 사용자 정의 점프 목록을 설정하거나 삭제하고 다음 문자열 중 하나를
반환:
* `ok` - 잘못된 것이 없음.
* `error` - 하나 이상의 에러 발생. 가능성 높은 원인을 파악하기 위해 런타임 로그
활성화하세요.
* `invalidSeparatorError` - 점프 목록의 사용자 정의 카테고리에서 구분자 추가
시도. 구분자는 표준 `Tasks` 카테고리에서만 가능 합니다.
* `fileTypeRegistrationError` - 앱이 등록하지 않은 파일 유형을 점프 목록에
추가하려고 시도함.
* `customCategoryAccessDeniedError` - 사용자 개인 정보 보호와 그룹 정책 설정에
따라 점프 목록에 사용자 정의 카테고리 추가가 불가능 합니다.
만약 `categories``null` 이면 이전 사용자 점프 목록 설정은 앱을 위한 표준
점프 목록으로 대체됩니다 (윈도우에 의해 관리됨).
`JumpListCategory` 객체는 다음 속성을 가져야 합니다:
* `type` String - 다음 중 하나:
* `tasks` - 이 카테고리의 항목은 표준 `Tasks` 카테고리에 위치할 것 입니다.
이 카테고리는 하나만 존재하며, 항상 점프 목록의 하단에 보여집니다.
* `frequent` - 앱에 의해 자주 열린 파일의 목록을 보여줍니다. 카테고리의
이름과 항목들은 윈도우에 의해 설정 됩니다.
* `recent` - 앱에 의해 최근에 열린 파일의 목록을 보여줍니다. 카테고리의
이름과 항목들은 윈도우에 의해 설정 됩니다. `app.addRecentDocument(path)`
사용하면 간접적으로 이 카테고리에 항목이 추가될 것 입니다.
* `custom` - 작업 또는 파일 링크를 보여주며, 앱에 의해 `name` 설정되어야 합니다.
* `name` String - `type``custom` 이면 꼭 설정되어야 하고, 그 외는 생략합니다.
* `items` Array - `type``tasks``JumpListItem` 객체의 배열, 그 외는
생략합니다.
**참고:** `JumpListCategory` 객체가 `type`, `name` 속성 둘 다 없다면 `type`
`tasks` 로 가정합니다. `name` 속성이 설정되었지만 `type` 속성이 생략된 경우
`type``custom` 으로 가정합니다.
**참고:** 사용자는 사용자 카테고리에서 항목을 삭제할 수 있습니다. 그리고 윈도우는
`app.setJumpList(categories)` 의 다음 성공적인 호출 이후까지 삭제된 항목을 다시
추가하는 것을 금지할 것 입니다. 그 이전에 커스텀 카테고리에 삭제된 항목을 다시
추가하려 한다면 커스텀 카테고리가 전부 점프 목록에서 빠질 것 입니다. 제거된 항목
목록은 `app.getJumpListSettings()` 를 사용해 얻을 수 있습니다.
`JumpListItem` 객체는 다음 속성을 가져야 합니다:
* `type` String - 다음 중 하나:
* `task` - 특정 인수로 앱을 실행시킬 작업.
* `separator` - 표준 `Tasks` 카테고리에서 항목을 구분할 수 있습니다.
* `file` - 점프 목록을 만든 앱을 사용하여 파일을 열 파일 링크. 이것이
동작하려면 그 파일 형식을 앱이 처리할 수 있게 등록되있어야 합니다. (하지만,
그것이 기본 처리기일 필요는 없습니다.).
* `path` String - 파일을 열기 위한 경로. `type``file` 경우에만 설정되어야
합니다.
* `program` String - 실행하기 위한 프로그램의 경로. 일반적으로 현재 프로그램을
열기 위해 `process.execPath` 를 지정해야 합니다.
* `args` String - `program` 이 실행됐을 때의 커맨드 라인 인수. `type`
`task` 일 경우만 설정되어야 합니다.
* `title` String - 점프 목록에서 항목에 표시될 글자. `type``task` 일 경우만
설정되어야 합니다.
* `description` String - 작업의 설명 (툴팁으로 표시됨). `type``task`
경우만 설정되어야 합니다.
* `iconPath` String - 점프 목록에서 보여질 아이콘의 절대 경로. 아이콘을 포함하는
임의의 자원 파일 경로일 수 있습니다. (예. `.ico`, `.exe`, `.dll`). 일반적으로
프로그램 아이콘을 보여주기 위해 `process.execPath` 를 명시할 수 있습니다.
* `iconIndex` Integer - 리소스 파일의 아이콘 인덱스. 리소스 파일이 여러 아이콘을
포함하고 있다면 이 작업을 위해 표시되어야 할 아이콘의 0 기준 인덱스를 명시할
수 있다. 리소스 파일이 하나의 아이콘만 가지고 있다면 이 속성은 0 이어야 합니다.
사용자 점프 목록을 생성하는 간단한 예제 입니다:
```javascript
const {app} = require('electron')
app.setJumpList([
{
type: 'custom',
name: 'Recent Projects',
items: [
{ type: 'file', path: 'C:\\Projects\\project1.proj' },
{ type: 'file', path: 'C:\\Projects\\project2.proj' }
]
},
{ // has a name so `type` is assumed to be "custom"
name: 'Tools',
items: [
{
type: 'task',
title: 'Tool A',
program: process.execPath,
args: '--run-tool-a',
icon: process.execPath,
iconIndex: 0,
description: 'Runs Tool A'
},
{
type: 'task',
title: 'Tool B',
program: process.execPath,
args: '--run-tool-b',
icon: process.execPath,
iconIndex: 0,
description: 'Runs Tool B'
}
]
},
{ type: 'frequent' },
{ // has no name and no type so `type` is assumed to be "tasks"
items: [
{
type: 'task',
title: 'New Project',
program: process.execPath,
args: '--new-project',
description: 'Create a new project.'
},
{ type: 'separator' },
{
type: 'task',
title: 'Recover Project',
program: process.execPath,
args: '--recover-project',
description: 'Recover Project'
}
]
}
])
```
### `app.makeSingleInstance(callback)`
* `callback` Function
* `argv` String[] - 두번째 인스턴스의 명령줄 인수의 배열
* `workingDirectory` String - 두번째 인스턴스의 작업 디렉토리
현재 애플리케이션을 단일 인스턴스 애플리케이션으로 만들어줍니다. 이 메서드는
애플리케이션이 여러 번 실행됐을 때 다중 인스턴스가 생성되는 대신 한 개의 주
인스턴스만 유지되도록 만들 수 있습니다. 이때 중복 생성된 인스턴스는 주 인스턴스에
신호를 보내고 종료됩니다.
`callback`은 주 인스턴스가 생성된 이후 또 다른 인스턴스가 생성됐을 때
`callback(argv, workingDirectory)` 형식으로 호출됩니다. `argv`는 두 번째
인스턴스의 명령줄 인수이며 `workingDirectory`는 현재 작업중인 디렉터리입니다.
보통 대부분의 애플리케이션은 이러한 콜백이 호출될 때 주 윈도우를 포커스하고
최소화되어있으면 창 복구를 실행합니다.
`callback``app``ready` 이벤트가 발생한 후 실행됨을 보장합니다.
이 메서드는 현재 실행된 애플리케이션이 주 인스턴스인 경우 `false`를 반환하고
애플리케이션의 로드가 계속 진행 되도록 합니다. 그리고 두 번째 중복된 인스턴스
생성인 경우 `true`를 반환합니다. (다른 인스턴스에 인수가 전달됬을 때) 이 불리언
값을 통해 중복 생성된 인스턴스는 즉시 종료시켜야 합니다.
macOS에선 사용자가 Finder에서 애플리케이션의 두 번째 인스턴스를 열려고 했을 때
자동으로 단일 인스턴스화 하고 `open-file``open-url` 이벤트를 발생시킵니다.
그러나 사용자가 애플리케이션을 CLI 터미널에서 실행하면 운영체제 시스템의 싱글
인스턴스 메커니즘이 무시되며 그대로 중복 실행됩니다. 따라서 macOS에서도 이
메서드를 통해 확실히 중복 실행을 방지하는 것이 좋습니다.
다음 예시는 두 번째 인스턴스가 생성되었을 때 중복된 인스턴스를 종료하고 주
애플리케이션 인스턴스의 윈도우를 활성화 시키는 예시입니다:
```javascript
const {app} = require('electron')
let myWindow = null
const shouldQuit = app.makeSingleInstance((commandLine, workingDirectory) => {
// 애플리케이션을 중복 실행했습니다. 주 애플리케이션 인스턴스를 활성화 합니다.
if (myWindow) {
if (myWindow.isMinimized()) myWindow.restore()
myWindow.focus()
}
})
if (shouldQuit) {
app.quit()
}
// 윈도우를 생성하고 각종 리소스를 로드하고 작업합니다.
app.on('ready', () => {
})
```
### `app.releaseSingleInstance()`
모든 `makeSingleInstance`에 의해 생성된 제한을 해제합니다. 이 메서드는 다시 여러
인스턴스의 애플리케이션이 나란히 실행될 수 있도록 합니다.
### `app.setUserActivity(type, userInfo[, webpageURL])` _macOS_
* `type` String - 고유하게 activity를 식별합니다.
[`NSUserActivity.activityType`][activity-type]을 맵핑합니다.
* `userInfo` Object - 다른 기기에서 사용하기 위해 저장할 앱-특정 상태.
* `webpageURL` String - 적당한 앱이 기기에 설치되지 않았을 때 브라우저에서 로드할
웹 페이지. 스킴은 반드시 `http` 또는 `https`가 되어야 합니다.
`NSUserActivity`를 만들고 현재 activity에 설정합니다. 이 activity는 이후 다른
기기와 [Handoff][handoff]할 때 자격으로 사용됩니다.
### `app.getCurrentActivityType()` _macOS_
Returns `String` - 현재 작동중인 activity의 타입.
### `app.setAppUserModelId(id)` _Windows_
* `id` String
[애플리케이션의 사용자 모델 ID][app-user-model-id]를 `id`로 변경합니다.
### `app.importCertificate(options, callback)` _LINUX_
* `options` Object
* `certificate` String - pkcs12 파일의 위치.
* `password` String - 인증서의 암호.
* `callback` Function
* `result` Integer - 가져오기의 결과.
pkcs12 형식으로된 인증서를 플랫폼 인증서 저장소로 가져옵니다. `callback`은 가져오기의
결과를 포함하는 `result` 객체를 포함하여 호출됩니다. 값이 `0` 일 경우 성공을 의미하며
다른 값은 모두 Chrominum의 [net_error_list](https://code.google.com/p/chromium/codesearch#chromium/src/net/base/net_error_list.h)에
따라 실패를 의미합니다.
### `app.disableHardwareAcceleration()`
현재 애플리케이션의 하드웨어 가속을 비활성화합니다.
이 메서드는 `app``ready` 이벤트가 발생하기 전에만 호출할 수 있습니다.
### `app.setBadgeCount(count)` _Linux_ _macOS_
* `count` Integer
Returns `Boolean` - 호출 성공 여부.
현재 앱에 대해 카운터 뱃지를 설정합니다. count 를 `0`으로 설정하면 뱃지를
숨깁니다.
macOS에선 독 아이콘에 표시됩니다. Linux에선 Unity 런처에서만 작동합니다.
**참고:** Unity 런처는 이 기능을 작동하기 위해 `.desktop` 파일을 필요로 합니다.
이에 대한 자세한 내용은 [데스크톱 환경 통합][unity-requiremnt]을 참고하세요.
### `app.getBadgeCount()` _Linux_ _macOS_
Returns `Integer` - 현재 카운터 뱃지에 표시중인 값.
### `app.isUnityRunning()` _Linux_
Returns `Boolean` - 현재 데스크톱 환경이 Unity 인지 여부.
### `app.getLoginItemSettings()` _macOS_ _Windows_
Returns `Object`:
* `openAtLogin` Boolean - 앱이 로그인시 열리도록 설정되어있는 경우 `true`를 반환.
* `openAsHidden` Boolean - 앱이 로구인시 숨겨진 채로 열리도록 설정되어있는 경우
`true`를 반환. 이 설정은 macOS에서만 지원됩니다.
* `wasOpenedAtLogin` Boolean - 자동으로 로그인할 때 애플리케이션이 열려있었는지
여부. 이 설정은 macOS에서만 지원됩니다.
* `wasOpenedAsHidden` Boolean - 앱이 숨겨진 로그인 항목처럼 열려있었는지 여부.
이는 앱이 시작시 어떤 윈도우도 열지 않을 것을 표시합니다. 이 설정은 macOS에서만
지원됩니다.
* `restoreState` Boolean - 앱이 이전 세션에서 상태를 복원하여 로그인 항목처럼
열려있었는지 여부. 이는 앱이 마지막으로 종료되었던 때에 열려있었던 윈도우를
복원하는 것을 표시합니다. 이 설정은 macOS에서만 지원됩니다.
**참고:** 이 API 는 [MAS 빌드][mas-builds]에 영향을 주지 않습니다.
### `app.setLoginItemSettings(settings)` _macOS_ _Windows_
* `settings` Object
* `openAtLogin` Boolean - `true`로 지정하면 로그인시 애플리케이션을 열도록 하며
`false`로 지정시 로그인 항목에서 삭제합니다.
* `openAsHidden` Boolean - `true`로 지정하면 애플리케이션을 숨겨진 채로 열도록
합니다. 기본값은 `false`입니다. 사용자가 시스템 설정에서 이 설정을 변경할 수
있으며 앱이 열렸을 때 현재 값을 확인하려면
`app.getLoginItemStatus().wasOpenedAsHidden`을 확인해야 합니다. 이 설정은
macOS에서만 지원됩니다.
앱의 로그인 항목 설정을 지정합니다.
**참고:** 이 API 는 [MAS 빌드][mas-builds]에 영향을 주지 않습니다.
### `app.isAccessibilitySupportEnabled()` _macOS_ _Windows_
Returns `Boolean` - Chrome의 접근성 지원이 활성화되어있으면 `true`를 그렇지
않다면 `false`를 반환합니다. 이 API는 사용할 수 있는 스크린 리더와 같은 접근성
기술이 감지되었을 때 `true`를 반환합니다. 자세한 내용은
https://www.chromium.org/developers/design-documents/accessibility 를 참고하세요.
### `app.setAboutPanelOptions(options)` _macOS_
* `options` Object
* `applicationName` String (optional) - 앱 이름.
* `applicationVersion` String (optional) - 앱 버전.
* `copyright` String (optional) - 저작권 정보.
* `credits` String (optional) - 크레딧 정보.
* `version` String (optional) - 앱 빌드 버전 숫자.
정보 패널의 옵션을 설정합니다. 앱의 `.plist` 에 정의된 값보다 우선합니다. 자세한
내용은 [애플 문서][about-panel-options]를 참조하세요.
### `app.commandLine.appendSwitch(switch[, value])`
* `switch` String -명령줄 스위치
* `value` String (optional) - 주어진 스위치에 대한 값
Chrominum의 명령줄에 스위치를 추가합니다. `value`는 추가적인 값을 뜻하며 옵션입니다.
**참고:** 이 메서드는 `process.argv`에 영향을 주지 않습니다. 개발자들은 보통
Chrominum의 로우 레벨 수준의 동작을 제어하기 위해 주로 사용합니다.
### `app.commandLine.appendArgument(value)`
* `value` String - 명령줄에 덧붙여질 인수
Chrominum의 명령줄에 인수를 추가합니다. 인수는 올바르게 인용됩니다.
**참고:** 이 메서드는 `process.argv`에 영향을 주지 않습니다.
### `app.dock.bounce([type])` _macOS_
* `type` String (optional) - `critical` 또는 `informational`을 지정할 수 있습니다.
기본값은 `informational` 입니다.
`critical`이 전달되면 dock 아이콘이 애플리케이션이 활성화되거나 요청이 중지되기
전까지 통통 튀는 바운스 효과를 적용합니다.
`informational`이 전달되면 dock 아이콘이 1초만 통통 튑니다. 하지만 애플리케이션이
활성화되거나 요청이 중지되기 전까지 요청은 계속 활성화로 유지 됩니다.
또한 요청을 취소할 때 사용할 수 있는 ID를 반환합니다.
### `app.dock.cancelBounce(id)` _macOS_
* `id` Integer
`app.dock.bounce([type])` 메서드에서 반환한 `id`의 바운스 효과를 취소합니다.
### `app.dock.downloadFinished(filePath)` _macOS_
* `filePath` String
`filePath`가 다운로드 폴더에 들어있다면 다운로드 스택을 바운스합니다.
### `app.dock.setBadge(text)` _macOS_
* `text` String
dock의 badge에 표시할 문자열을 설정합니다.
### `app.dock.getBadge()` _macOS_
Returns `String` - dock의 badge에 설정된 문자열.
### `app.dock.hide()` _macOS_
dock 아이콘을 숨깁니다.
### `app.dock.show()` _macOS_
dock 아이콘을 표시합니다.
### `app.dock.isVisible()` _macOS_
Returns `Boolean` - dock 아이콘이 보이는 상태인지 여부. `app.dock.show()` 호출은
비동기이므로 해당 메서드를 호출한 후 바로 이 메서드를 호출하면 `true`를 반환하지
않을 수 있습니다.
### `app.dock.setMenu(menu)` _macOS_
* `menu` [Menu](menu.md)
애플리케이션의 [dock menu][dock-menu]를 설정합니다.
### `app.dock.setIcon(image)` _macOS_
* `image` [NativeImage](native-image.md)
dock 아이콘의 `image`를 설정합니다.
[dock-menu]:https://developer.apple.com/library/mac/documentation/Carbon/Conceptual/customizing_docktile/concepts/dockconcepts.html#//apple_ref/doc/uid/TP30000986-CH2-TPXREF103
[tasks]:http://msdn.microsoft.com/en-us/library/windows/desktop/dd378460(v=vs.85).aspx#tasks
[app-user-model-id]: https://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx
[CFBundleURLTypes]: https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/TP40009249-102207-TPXREF115
[LSCopyDefaultHandlerForURLScheme]: https://developer.apple.com/library/mac/documentation/Carbon/Reference/LaunchServicesReference/#//apple_ref/c/func/LSCopyDefaultHandlerForURLScheme
[handoff]: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/Handoff/HandoffFundamentals/HandoffFundamentals.html
[activity-type]: https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSUserActivity_Class/index.html#//apple_ref/occ/instp/NSUserActivity/activityType
[unity-requiremnt]: ../tutorial/desktop-environment-integration.md#unity-launcher-shortcuts-linux
[mas-builds]: docs/tutorial/mac-app-store-submission-guide.md
[JumpListBeginListMSDN]: https://msdn.microsoft.com/en-us/library/windows/desktop/dd378398(v=vs.85).aspx
[about-panel-options]: https://developer.apple.com/reference/appkit/nsapplication/1428479-orderfrontstandardaboutpanelwith?language=objc

View file

@ -1,130 +0,0 @@
# autoUpdater
> 애플리케이션이 자동으로 업데이트를 진행할 수 있도록 기능을 활성화합니다.
`autoUpdater` 모듈은 [Squirrel](https://github.com/Squirrel) 프레임워크에 대한
인터페이스를 제공합니다.
다음 프로젝트 중 하나를 선택하여, 애플리케이션을 배포하기 위한 멀티-플랫폼 릴리즈
서버를 손쉽게 구축할 수 있습니다:
- [nuts][nuts]: *애플리케이션을 위한 똑똑한 릴리즈 서버이며 GitHub를 백엔드로
사용합니다. Squirrel을 통해 자동 업데이트를 지원합니다. (Mac & Windows)*
- [electron-release-server][electron-release-server]: *완벽하게 모든 기능을
지원하는 electron 애플리케이션을 위한 자가 호스트 릴리즈 서버입니다. autoUpdater와
호환됩니다*
- [squirrel-updates-server][squirrel-updates-server]: *GitHub 릴리즈를 사용하는
Squirrel.Mac 와 Squirrel.Windows를 위한 간단한 node.js 기반 서버입니다*
## 플랫폼별 참고 사항
`autoUpdater`는 기본적으로 모든 플랫폼에 대해 같은 API를 제공하지만, 여전히 플랫폼별로
약간씩 다른 점이 있습니다.
### macOS
macOS에선 `autoUpdater`가 [Squirrel.Mac][squirrel-mac]를 기반으로 작동합니다.
따라서 이 모듈을 작동시키기 위해 특별히 준비해야 할 작업은 없습니다.
서버 사이드 요구 사항은 [서버 지원][server-support]을 참고하세요.
**참고:** macOS에서 자동 업데이트를 지원하려면 반드시 사인이 되어있어야 합니다.
이것은 `Squirrel.Mac`의 요구 사항입니다.
### Windows
Windows에선 `autoUpdater`를 사용하기 전에 애플리케이션을 사용자의 장치에
설치해야 합니다. [electron-winstaller][installer-lib],
[electron-builder][electron-builder-lib] 또는
[grunt-electron-installer][installer]를 사용하여 애플리케이션 인스톨러를 만드는 것을
권장합니다.
Windows에선 `autoUpdater` 모듈을 사용하기 전에 사용자의 장치에 애플리케이션을
설치해야 합니다. 따라서 [electron-winstaller][installer-lib] 모듈이나
[grunt-electron-installer][installer] 패키지를 사용하여 애플리케이션 인스톨러를
만드는 것을 권장합니다.
Squirrel로 생성된 인스톨러는 [Application User Model ID][app-user-model-id]와 함께
`com.squirrel.PACKAGE_ID.YOUR_EXE_WITHOUT_DOT_EXE`으로 형식화된 바로가기 아이콘을
생성합니다. `com.squirrel.slack.Slack``com.squirrel.code.Code`가 그 예시입니다.
`app.setAppUserModelId` API를 통해 애플리케이션 ID를 동일하게 유지해야 합니다. 그렇지
않으면 Windows 작업 표시줄에 애플리케이션을 고정할 때 제대로 적용되지 않을 수 있습니다.
서버 사이드 요구 사항 또한 macOS와 다르게 적용됩니다. 자세한 내용은
[Squirrel.Windows][squirrel-windows]를 참고하세요.
### Linux
Linux는 따로 `autoUpdater`를 지원하지 않습니다.
각 배포판의 패키지 관리자를 통해 애플리케이션 업데이트를 제공하는 것을 권장합니다.
## Events
`autoUpdater` 객체는 다음과 같은 이벤트를 발생시킵니다:
### Event: 'error'
Returns:
* `error` Error
업데이트에 문제가 생기면 발생하는 이벤트입니다.
### Event: 'checking-for-update'
업데이트를 확인하기 시작할 때 발생하는 이벤트입니다.
### Event: 'update-available'
사용 가능한 업데이트가 있을 때 발생하는 이벤트입니다. 이벤트는 자동으로 다운로드 됩니다.
### Event: 'update-not-available'
사용 가능한 업데이트가 없을 때 발생하는 이벤트입니다.
### Event: 'update-downloaded'
Returns:
* `event` Event
* `releaseNotes` String
* `releaseName` String
* `releaseDate` Date
* `updateURL` String
업데이트의 다운로드가 완료되었을 때 발생하는 이벤트입니다.
## Methods
`autoUpdater` 객체에서 사용할 수 있는 메서드입니다:
### `autoUpdater.setFeedURL(url[, requestHeaders])`
* `url` String
* `requestHeaders` Object _macOS_ - HTTP 요청 헤더.
`url`을 설정하고 자동 업데이터를 초기화합니다.
### `autoUpdater.getFeedURL()`
Returns `String` - 현재 업데이트 피드 URL.
### `autoUpdater.checkForUpdates()`
서버에 새로운 업데이트가 있는지 요청을 보내 확인합니다. API를 사용하기 전에
`setFeedURL`를 호출해야 합니다.
### `autoUpdater.quitAndInstall()`
애플리케이션을 다시 시작하고 다운로드된 업데이트를 설치합니다.
이 메서드는 `update-downloaded` 이벤트가 발생한 이후에만 사용할 수 있습니다.
[squirrel-mac]: https://github.com/Squirrel/Squirrel.Mac
[server-support]: https://github.com/Squirrel/Squirrel.Mac#server-support
[squirrel-windows]: https://github.com/Squirrel/Squirrel.Windows
[installer]: https://github.com/electron/grunt-electron-installer
[installer-lib]: https://github.com/electron/windows-installer
[electron-builder-lib]: https://github.com/electron-userland/electron-builder
[app-user-model-id]: https://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx
[electron-release-server]: https://github.com/ArekSredzki/electron-release-server
[squirrel-updates-server]: https://github.com/Aluxian/squirrel-updates-server
[nuts]: https://github.com/GitbookIO/nuts

Some files were not shown because too many files have changed in this diff Show more