auto-standardize javascript in docs-translations

This commit is contained in:
Zeke Sikelianos 2016-10-02 20:47:16 -07:00
parent 2e4322c230
commit 4ae6103356
108 changed files with 1213 additions and 1213 deletions

View file

@ -6,13 +6,13 @@ anexarlas en el script principal de tu aplicación antes de que el evento [ready
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');
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() {
app.on('ready', function () {
// Your code here
});
})
```
## --client-certificate=`path`

View file

@ -21,12 +21,12 @@ de Node eliminados, al alcance global cuando la integración de Node está apaga
```js
// preload.js
var _setImmediate = setImmediate;
var _clearImmediate = clearImmediate;
process.once('loaded', function() {
global.setImmediate = _setImmediate;
global.clearImmediate = _clearImmediate;
});
var _setImmediate = setImmediate
var _clearImmediate = clearImmediate
process.once('loaded', function () {
global.setImmediate = _setImmediate
global.clearImmediate = _clearImmediate
})
```
## Methods

View file

@ -18,15 +18,15 @@ con el concepto de [scripts para proceso principal vs scripts para proceso rende
El script del proceso principal es como un script normal de Node.js:
```javascript
var app = require('app');
var BrowserWindow = require('browser-window');
var app = require('app')
var BrowserWindow = require('browser-window')
var window = null;
var window = null
app.on('ready', function() {
window = new BrowserWindow({width: 800, height: 600});
window.loadURL('https://github.com');
});
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

View file

@ -94,7 +94,7 @@ 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) {
Alarm.on('wake-up', function (time) {
console.log(time)
})
```

View file

@ -48,29 +48,29 @@ $ asar list /path/to/example.asar
Leer un archivo de nuestro paquete `asar`:
```javascript
var fs = require('fs');
fs.readFileSync('/path/to/example.asar/file.txt');
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');
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');
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');
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
@ -96,8 +96,8 @@ 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');
var originalFs = require('original-fs')
originalFs.readFileSync('/path/to/example.asar')
```
## Limitaciones de la API Node:

View file

@ -22,14 +22,14 @@ 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');
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();
app.clearRecentDocuments()
```
### Notas sobre Windows
@ -60,17 +60,17 @@ __Menú dock de Terminal.app:__
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 app = require('app')
var Menu = require('menu')
var dockMenu = Menu.buildFromTemplate([
{ label: 'New Window', click: function() { console.log('New Window'); } },
{ 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);
])
app.dock.setMenu(dockMenu)
```
## Tareas de usuario (Windows)
@ -107,7 +107,7 @@ Para establecer las tareas de usuario en tu aplicación, puedes utilizar:
[app.setUserTasks][setusertaskstasks] API:
```javascript
var app = require('app');
var app = require('app')
app.setUserTasks([
{
program: process.execPath,
@ -117,13 +117,13 @@ app.setUserTasks([
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([]);
app.setUserTasks([])
```
Las tareas de usuario aún serán visibles después de cerrar tu aplicación, por lo cual

View file

@ -18,14 +18,14 @@ 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');
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');
require('remote').require('browser-window').removeDevToolsExtension('React Developer Tools')
```
## Formato de las extensiones devtools

View file

@ -6,14 +6,14 @@ como en este ejemplo:
_main.js_
```javascript
var app = require('app');
var BrowserWindow = require('browser-window');
var onlineStatusWindow;
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');
});
app.on('ready', function () {
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false })
onlineStatusWindow.loadURL('file://' + __dirname + '/online-status.html')
})
```
_online-status.html_
@ -43,19 +43,19 @@ Es posible reenviar el evento al proceso principal mediante la utilidad de inter
_main.js_
```javascript
var app = require('app');
var ipc = require('ipc');
var BrowserWindow = require('browser-window');
var onlineStatusWindow;
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');
});
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);
});
ipc.on('online-status-changed', function (event, status) {
console.log(status)
})
```
_online-status.html_

View file

@ -65,43 +65,43 @@ a ser ejecutado por el proceso principal. Un ejemplo de `package.json` podría v
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.
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;
var mainWindow = null
// Salir de todas las ventanas cuando se cierren.
app.on('window-all-closed', function() {
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();
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() {
app.on('ready', function () {
// Crear la ventana.
mainWindow = new BrowserWindow({width: 800, height: 600});
mainWindow = new BrowserWindow({width: 800, height: 600})
// cargar el index.html de nuestra aplicación.
mainWindow.loadURL('file://' + __dirname + '/index.html');
mainWindow.loadURL('file://' + __dirname + '/index.html')
// Desplegar devtools.
mainWindow.openDevTools();
mainWindow.openDevTools()
// Evento emitido cuando se cierra la ventana.
mainWindow.on('closed', function() {
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;
});
});
mainWindow = null
})
})
```
Finalmente el `index.html` es la página web que mostraremos:

View file

@ -12,40 +12,40 @@ Puedes agregar la opción `--ppapi-flash-path` y `ppapi-flash-version` o utiliz
También puedes agregar la opción `plugins` de `browser-window`. Por ejemplo,
```javascript
var app = require('app');
var BrowserWindow = require('browser-window');
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;
var mainWindow = null
// Quit when all windows are closed.
app.on('window-all-closed', function() {
app.on('window-all-closed', function () {
if (process.platform != 'darwin') {
app.quit();
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');
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.commandLine.appendSwitch('ppapi-flash-version', '17.0.0.169')
app.on('ready', function() {
app.on('ready', function () {
mainWindow = new BrowserWindow({
'width': 800,
'height': 600,
'web-preferences': {
'plugins': true
}
});
mainWindow.loadURL('file://' + __dirname + '/index.html');
})
mainWindow.loadURL('file://' + __dirname + '/index.html')
// Something else
});
})
```
## Activar el plugin flash en una etiqueta `<webview>`

View file

@ -40,7 +40,7 @@ excepto que necesitas especificar manualmente cómo se conectará el chrome driv
y dónde encontrará el binario de Electron:
```javascript
var webdriver = require('selenium-webdriver');
var webdriver = require('selenium-webdriver')
var driver = new webdriver.Builder()
// El puerto "9515" es que abre chrome driver.
@ -49,18 +49,18 @@ var driver = new webdriver.Builder()
// Aquí especificamos la ruta a Electron
binary: '/Path-to-Your-App.app/Contents/MacOS/Atom'}})
.forBrowser('electron')
.build();
.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.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();
driver.quit()
```
## Workflow

View file

@ -36,17 +36,17 @@ Si vous voulez corriger rapidement le problème, vous pouvez rendre les variable
globales en changeant votre code de ça :
```javascript
app.on('ready', function() {
var tray = new Tray('/path/to/icon.png');
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');
var tray = null
app.on('ready', function () {
tray = new Tray('/path/to/icon.png')
})
```
@ -65,7 +65,7 @@ var mainWindow = new BrowserWindow({
webPreferences: {
nodeIntegration: false
}
});
})
```
Mais si vous voulez garder la possibilité d'utiliser Node.js et les APIs
@ -101,7 +101,7 @@ Vous vérifiez que vous utilisez les bons modules, vous pouvez afficher le
chemin du module `electron` :
```javascript
console.log(require.resolve('electron'));
console.log(require.resolve('electron'))
```
et vérifier si il est de la forme :

View file

@ -95,7 +95,7 @@ valeur, elle est écrite en dessous ainsi que son type. Si vous voulez écouter
répondre à l'évènement wake-up, ça donne quelque chose comme :
```javascript
Alarm.on('wake-up', function(time) {
Alarm.on('wake-up', function (time) {
console.log(time)
})
```

View file

@ -1,6 +1,6 @@
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ì non fosse, stai probabilmente utilizzando una documentazione facente
Se cos<EFBFBD> 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

View file

@ -48,7 +48,7 @@ API.
* 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ù di due livelli (per via del rendering compiuto
* Non annidare le liste per pi<EFBFBD> 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).
@ -97,7 +97,7 @@ Prendendo `autoUpdate` come esempio:
* Le classi API e le classi che sono parte di moduli devono essere elencate
sotto un capitolo `## Classe: NomeDellaClasse`.
* Una pagina può avere più classi.
* Una pagina pu<EFBFBD> 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`.
@ -105,7 +105,7 @@ sotto un capitolo `## Classe: NomeDellaClasse`.
capitolo `### Metodi di Istanza`.
* Gli Eventi di Istanza devono essere elencati sotto un capitolo
`## Eventi di Istanza`.
* Le Proprietà di Istanza devono essere elencate sotto un capitolo `## Proprietà di Istanza`.
* Le Propriet<EFBFBD> di Istanza devono essere elencate sotto un capitolo `## Propriet<65> di Istanza`.
Prendendo le classi `Session` e `Cookies` come esempi:
@ -116,7 +116,7 @@ Prendendo le classi `Session` e `Cookies` come esempi:
### session.fromPartition(partition)
## Proprietà
## Propriet<EFBFBD>
### session.defaultSession
@ -130,7 +130,7 @@ Prendendo le classi `Session` e `Cookies` come esempi:
#### `ses.getCacheSize(callback)`
### Proprietà di Istanza
### Propriet<EFBFBD> di Istanza
#### `ses.cookies`
@ -154,10 +154,10 @@ Il capitolo dei metodi deve seguire il seguente formato:
...
```
Il titolo può essere di livello `###` o `####` a seconda che sia un metodo di
Il titolo pu<EFBFBD> essere di livello `###` o `####` a seconda che sia un metodo di
un modulo o di una classe.
Per i moduli, il `nomeOggetto` è il nome del modulo. Per le classi, deve essere
Per i moduli, il `nomeOggetto` <EFBFBD> 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
@ -172,7 +172,7 @@ required[, optional]
```
Sotto ogni metodo si trovano informazioni dettagliate su ogni parametro. Il tipo
di parametro è caratterizzato da uno dei tipi di dati comuni:
di parametro <EFBFBD> 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)
@ -192,7 +192,7 @@ corsivo e delimitati da uno spazio. I valori possono essere `macOS`,
```
I parametri di tipo `Array` devono specificare nella descrizione sottostante
che elementi può contenere l'array.
che elementi pu<EFBFBD> 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.
@ -211,14 +211,14 @@ Ritorna:
...
```
Il titolo può essere di livello `###` o `####` a seconda che sia di un evento di
Il titolo pu<EFBFBD> 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à
### Propriet<EFBFBD>
Il capitolo delle proprietà deve seguire il seguente formato:
Il capitolo delle propriet<EFBFBD> deve seguire il seguente formato:
```markdown
### session.defaultSession
@ -226,7 +226,7 @@ Il capitolo delle propriet
...
```
Il titolo può essere di livello `###` o `####` a seconda che sia una proprietà
Il titolo pu<EFBFBD> essere di livello `###` o `####` a seconda che sia una propriet<65>
di un metodo o di una classe.
## Traduzioni della Documentazione
@ -243,4 +243,4 @@ 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ì.
i file tradotti. I file originali in inglese non devono essere copiati l<EFBFBD>.

View file

@ -5,10 +5,10 @@
次の例は、最後のウィンドウが閉じたときにアプリケーションを終了させる方法を示しています。
```javascript
const app = require('electron').app;
app.on('window-all-closed', function() {
app.quit();
});
const app = require('electron').app
app.on('window-all-closed', function () {
app.quit()
})
```
## イベント
@ -134,15 +134,15 @@ Windowsでは、ファイルパスを取得するために、 `process.argv` を
`url``certificate` 検証に失敗したときに発生します。証明書を信頼するために`event.preventDefault()``callback(true)`をコールして既定の動作を止める必要があります。
```javascript
session.on('certificate-error', function(event, webContents, url, error, certificate, callback) {
if (url == "https://github.com") {
session.on('certificate-error', function (event, webContents, url, error, certificate, callback) {
if (url == 'https://github.com') {
// Verification logic.
event.preventDefault();
callback(true);
event.preventDefault()
callback(true)
} else {
callback(false);
callback(false)
}
});
})
```
### イベント: 'select-client-certificate'
@ -162,9 +162,9 @@ session.on('certificate-error', function(event, webContents, url, error, certifi
`url` は、クライアント証明書を要求するナビゲーションエントリーに対応し、`callback` リストからエントリをフィルターしてコールするのに必要です。`event.preventDefault()` を使用して、アプリケーションの証明書ストアから最初の証明書を使用するのを止めることができます。
```javascript
app.on('select-client-certificate', function(event, webContents, url, list, callback) {
event.preventDefault();
callback(list[0]);
app.on('select-client-certificate', function (event, webContents, url, list, callback) {
event.preventDefault()
callback(list[0])
})
```
@ -191,9 +191,9 @@ Returns:
既定の動作ではすべての認証をキャンセルしたり、`event.preventDefault()``callback(username, password)` とを証明書でコールし既定の動作をとめてオーバーライドします。
```javascript
app.on('login', function(event, webContents, request, authInfo, callback) {
event.preventDefault();
callback('username', 'secret');
app.on('login', function (event, webContents, request, authInfo, callback) {
event.preventDefault()
callback('username', 'secret')
})
```
@ -360,23 +360,23 @@ app.on('ready', function() {
使用例:
```js
let browserOptions = {width: 1000, height: 800};
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;
browserOptions.transparent = true
browserOptions.frame = false
}
// Create the window.
win = new BrowserWindow(browserOptions);
win = new BrowserWindow(browserOptions)
// Navigate.
if (browserOptions.transparent) {
win.loadURL('file://' + __dirname + '/index.html');
win.loadURL('file://' + __dirname + '/index.html')
} else {
// No transparency, so we load a fallback that uses basic styles.
win.loadURL('file://' + __dirname + '/fallback.html');
win.loadURL('file://' + __dirname + '/fallback.html')
}
```

View file

@ -5,13 +5,13 @@
アプリケーションのメインスクリプトで[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');
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
});
})
```

View file

@ -3,15 +3,15 @@
`clipboard`モジュールは、コピーとペースト操作を実行するメソッドを提供します。次の例は、クリップボードに文字列を書き込む方法を示しています:
```javascript
const clipboard = require('electron').clipboard;
clipboard.writeText('Example String');
const clipboard = require('electron').clipboard
clipboard.writeText('Example String')
```
X Windowsシステム上では、セレクションクリップボードがあります。それを操作するために、それぞれのメソッドで、`selection`を通す必要があります。
```javascript
clipboard.writeText('Example String', 'selection');
console.log(clipboard.readText('selection'));
clipboard.writeText('Example String', 'selection')
console.log(clipboard.readText('selection'))
```
## メソッド
@ -79,7 +79,7 @@ HTMLマークアップとして、クリップボードの内容を返します
`data`で指定したフォーマットをクリップボードがサポートしているかどうかを返します。
```javascript
console.log(clipboard.has('<p>selection</p>'));
console.log(clipboard.has('<p>selection</p>'))
```
### `clipboard.read(data[, type])` _実験_
@ -98,6 +98,6 @@ console.log(clipboard.has('<p>selection</p>'));
* `type` String (optional)
```javascript
clipboard.write({text: 'test', html: "<b>test</b>"});
clipboard.write({text: 'test', html: '<b>test</b>'})
```
クリップボードに`data`を書き込みます。

View file

@ -3,22 +3,22 @@
`content-tracing`モジュールは、Chromiumコンテンツモジュールによって生成されるトーレスデータを収集するのに使われます。このモジュールはウェブインターフェイスを含んでいないので、Chromeブラウザーで `chrome://tracing/`を開いて、結果を表示するために生成されたファイルを読み込む必要があります。
```javascript
const contentTracing = require('electron').contentTracing;
const contentTracing = require('electron').contentTracing
const options = {
categoryFilter: '*',
traceOptions: 'record-until-full,enable-sampling'
}
contentTracing.startRecording(options, function() {
console.log('Tracing started');
contentTracing.startRecording(options, function () {
console.log('Tracing started')
setTimeout(function() {
contentTracing.stopRecording('', function(path) {
console.log('Tracing data recorded to ' + path);
});
}, 5000);
});
setTimeout(function () {
contentTracing.stopRecording('', function (path) {
console.log('Tracing data recorded to ' + path)
})
}, 5000)
})
```
## メソッド

View file

@ -5,14 +5,14 @@
リモートサーバーに自動的にクラッシュレポートを登録する例です。
```javascript
const crashReporter = require('electron').crashReporter;
const crashReporter = require('electron').crashReporter
crashReporter.start({
productName: 'YourName',
companyName: 'YourCompany',
submitURL: 'https://your-domain.com/url-to-submit',
autoSubmit: true
});
})
```
## メソッド

View file

@ -4,12 +4,12 @@
```javascript
// In the renderer process.
var desktopCapturer = require('electron').desktopCapturer;
var desktopCapturer = require('electron').desktopCapturer
desktopCapturer.getSources({types: ['window', 'screen']}, function(error, sources) {
if (error) throw error;
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") {
if (sources[i].name == 'Electron') {
navigator.webkitGetUserMedia({
audio: false,
video: {
@ -22,18 +22,18 @@ desktopCapturer.getSources({types: ['window', 'screen']}, function(error, source
maxHeight: 720
}
}
}, gotStream, getUserMediaError);
return;
}, gotStream, getUserMediaError)
return
}
}
});
})
function gotStream(stream) {
document.querySelector('video').src = URL.createObjectURL(stream);
function gotStream (stream) {
document.querySelector('video').src = URL.createObjectURL(stream)
}
function getUserMediaError(e) {
console.log('getUserMediaError');
function getUserMediaError (e) {
console.log('getUserMediaError')
}
```

View file

@ -7,8 +7,8 @@
フレームの無いウィンドウを作成するために、[BrowserWindow](browser-window.md)の `options`で、`frame``false`に設定する必要があります。
```javascript
const BrowserWindow = require('electron').BrowserWindow;
var win = new BrowserWindow({ width: 800, height: 600, frame: false });
const BrowserWindow = require('electron').BrowserWindow
var win = new BrowserWindow({ width: 800, height: 600, frame: false })
```
### macOSでの別の方法
@ -16,7 +16,7 @@ var win = new BrowserWindow({ width: 800, height: 600, frame: false });
macOS 10.10 Yosemite以降では、Chrome無しのウィンドウを指定する方法があります。`frame``false`に設定しタイトルバーとウィンドウコントロールの両方を無効にする代わりに、タイトルバーを隠しコンテンツをフルウィンドウサイズに広げたいけど、標準的なウィンドウ操作用にウィンドウコントロール("トラフィックライト")を維持したいかもしれません。新しい`titleBarStyle`オプションを指定することで、そうできます。
```javascript
var win = new BrowserWindow({ 'titleBarStyle': 'hidden' });
var win = new BrowserWindow({ 'titleBarStyle': 'hidden' })
```
## 透明なウィンドウ
@ -24,7 +24,7 @@ var win = new BrowserWindow({ 'titleBarStyle': 'hidden' });
`transparent`オプションを`true`に設定すると、フレームの無い透明なウィンドウを作成できます。
```javascript
var win = new BrowserWindow({ transparent: true, frame: false });
var win = new BrowserWindow({ transparent: true, frame: false })
```
### 制限

View file

@ -5,31 +5,31 @@
**Note:** ショートカットはグローバルです。アプリがキーボードフォーカスを持っていなくても動作します。`app`モジュールの `ready`イベントが出力されるまでは使うべきではありません。
```javascript
const electron = require('electron');
const app = electron.app;
const globalShortcut = electron.globalShortcut;
const electron = require('electron')
const app = electron.app
const globalShortcut = electron.globalShortcut
app.on('ready', function() {
app.on('ready', function () {
// Register a 'ctrl+x' shortcut listener.
var ret = globalShortcut.register('ctrl+x', function() {
console.log('ctrl+x is pressed');
});
var ret = globalShortcut.register('ctrl+x', function () {
console.log('ctrl+x is pressed')
})
if (!ret) {
console.log('registration failed');
console.log('registration failed')
}
// Check whether a shortcut is registered.
console.log(globalShortcut.isRegistered('ctrl+x'));
});
console.log(globalShortcut.isRegistered('ctrl+x'))
})
app.on('will-quit', function() {
app.on('will-quit', function () {
// Unregister a shortcut.
globalShortcut.unregister('ctrl+x');
globalShortcut.unregister('ctrl+x')
// Unregister all shortcuts.
globalShortcut.unregisterAll();
});
globalShortcut.unregisterAll()
})
```
## メソッド

View file

@ -14,27 +14,27 @@
```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');
});
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';
});
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"
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');
ipcRenderer.on('asynchronous-reply', function (event, arg) {
console.log(arg) // prints "pong"
})
ipcRenderer.send('asynchronous-message', 'ping')
```
## メッセージ受信

View file

@ -64,7 +64,7 @@ var template = [
label: 'Select All',
accelerator: 'CmdOrCtrl+A',
role: 'selectall'
},
}
]
},
{
@ -73,37 +73,37 @@ var template = [
{
label: 'Reload',
accelerator: 'CmdOrCtrl+R',
click: function(item, focusedWindow) {
click: function (item, focusedWindow) {
if (focusedWindow)
focusedWindow.reload();
focusedWindow.reload()
}
},
{
label: 'Toggle Full Screen',
accelerator: (function() {
accelerator: (function () {
if (process.platform == 'darwin')
return 'Ctrl+Command+F';
return 'Ctrl+Command+F'
else
return 'F11';
return 'F11'
})(),
click: function(item, focusedWindow) {
click: function (item, focusedWindow) {
if (focusedWindow)
focusedWindow.setFullScreen(!focusedWindow.isFullScreen());
focusedWindow.setFullScreen(!focusedWindow.isFullScreen())
}
},
{
label: 'Toggle Developer Tools',
accelerator: (function() {
accelerator: (function () {
if (process.platform == 'darwin')
return 'Alt+Command+I';
return 'Alt+Command+I'
else
return 'Ctrl+Shift+I';
return 'Ctrl+Shift+I'
})(),
click: function(item, focusedWindow) {
click: function (item, focusedWindow) {
if (focusedWindow)
focusedWindow.toggleDevTools();
focusedWindow.toggleDevTools()
}
},
}
]
},
{
@ -119,7 +119,7 @@ var template = [
label: 'Close',
accelerator: 'CmdOrCtrl+W',
role: 'close'
},
}
]
},
{
@ -128,14 +128,14 @@ var template = [
submenu: [
{
label: 'Learn More',
click: function() { require('electron').shell.openExternal('http://electron.atom.io') }
},
click: function () { require('electron').shell.openExternal('http://electron.atom.io') }
}
]
},
];
}
]
if (process.platform == 'darwin') {
var name = require('electron').remote.app.getName();
var name = require('electron').remote.app.getName()
template.unshift({
label: name,
submenu: [
@ -174,10 +174,10 @@ if (process.platform == 'darwin') {
{
label: 'Quit',
accelerator: 'Command+Q',
click: function() { app.quit(); }
},
click: function () { app.quit() }
}
]
});
})
// Window menu.
template[3].submenu.push(
{
@ -187,11 +187,11 @@ if (process.platform == 'darwin') {
label: 'Bring All to Front',
role: 'front'
}
);
)
}
var menu = Menu.buildFromTemplate(template);
Menu.setApplicationMenu(menu);
var menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)
```
## クラス: Menu

View file

@ -5,15 +5,15 @@ Electronでは、画像を取得するAPI用に、ファイルパスまたは`na
例えば、トレイを作成したり、ウィンドウアイコンを設定する時、`String`としてイメージファイルパスを渡します:
```javascript
var appIcon = new Tray('/Users/somebody/images/icon.png');
var window = new BrowserWindow({icon: '/Users/somebody/images/window.png'});
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);
var image = clipboard.readImage()
var appIcon = new Tray(image)
```
## 対応しているフォーマット
@ -42,7 +42,7 @@ images/
```javascript
var appIcon = new Tray('/Users/somebody/images/icon.png');
var appIcon = new Tray('/Users/somebody/images/icon.png')
```
次のDPIサフィックスに対応しています:
@ -107,9 +107,9 @@ var appIcon = new Tray('/Users/somebody/images/icon.png');
`nativeImage`のインスタンス上で提供されるメソッド:
```javascript
const nativeImage = require('electron').nativeImage;
const nativeImage = require('electron').nativeImage
var image = nativeImage.createFromPath('/Users/somebody/images/icon.png');
var image = nativeImage.createFromPath('/Users/somebody/images/icon.png')
```
### `image.toPNG()`

View file

@ -5,11 +5,11 @@
例:
```javascript
app.on('ready', function() {
require('electron').powerMonitor.on('suspend', function() {
console.log('The system is going to sleep');
});
});
app.on('ready', function () {
require('electron').powerMonitor.on('suspend', function () {
console.log('The system is going to sleep')
})
})
```
## イベント

View file

@ -5,12 +5,12 @@
例:
```javascript
const powerSaveBlocker = require('electron').powerSaveBlocker;
const powerSaveBlocker = require('electron').powerSaveBlocker
var id = powerSaveBlocker.start('prevent-display-sleep');
console.log(powerSaveBlocker.isStarted(id));
var id = powerSaveBlocker.start('prevent-display-sleep')
console.log(powerSaveBlocker.isStarted(id))
powerSaveBlocker.stop(id);
powerSaveBlocker.stop(id)
```
## メソッド

View file

@ -14,12 +14,12 @@ Node統合がオフになっているとき、削除したNodeグローバルシ
```js
// preload.js
var _setImmediate = setImmediate;
var _clearImmediate = clearImmediate;
process.once('loaded', function() {
global.setImmediate = _setImmediate;
global.clearImmediate = _clearImmediate;
});
var _setImmediate = setImmediate
var _clearImmediate = clearImmediate
process.once('loaded', function () {
global.setImmediate = _setImmediate
global.clearImmediate = _clearImmediate
})
```
## プロパティ

View file

@ -5,20 +5,20 @@
`file://`プロトコルの同様の効果をもつプロトコルを実装した例です。
```javascript
const electron = require('electron');
const app = electron.app;
const path = require('path');
const electron = require('electron')
const app = electron.app
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.normalize(__dirname + '/' + url)});
}, function (error) {
if (error)
console.error('Failed to register protocol')
});
});
app.on('ready', function () {
var protocol = electron.protocol
protocol.registerFileProtocol('atom', function (request, callback) {
var url = request.url.substr(7)
callback({path: path.normalize(__dirname + '/' + url)})
}, function (error) {
if (error)
console.error('Failed to register protocol')
})
})
```
**Note:** このモジュールは、`app`モジュールで`ready`イベントが出力された後のみ使うことができます。
@ -77,12 +77,12 @@ app.on('ready', function() {
例:
```javascript
protocol.registerBufferProtocol('atom', function(request, callback) {
callback({mimeType: 'text/html', data: new Buffer('<h5>Response</h5>')});
protocol.registerBufferProtocol('atom', function (request, callback) {
callback({mimeType: 'text/html', data: new Buffer('<h5>Response</h5>')})
}, function (error) {
if (error)
console.error('Failed to register protocol')
});
})
```
### `protocol.registerStringProtocol(scheme, handler[, completion])`

View file

@ -7,11 +7,11 @@ Electronでは、GUI関連モジュール`dialog`や`menu`など)はメイ
レンダラープロセスからブラウザーウィンドウを作成する例:
```javascript
const remote = require('electron').remote;
const BrowserWindow = remote.BrowserWindow;
const remote = require('electron').remote
const BrowserWindow = remote.BrowserWindow
var win = new BrowserWindow({ width: 800, height: 600 });
win.loadURL('https://github.com');
var win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL('https://github.com')
```
**Note:** 逆には(メインプロセスからレンダラープロセスにアクセスする)、[webContents.executeJavascript](web-contents.md#webcontentsexecutejavascriptcode-usergesture)が使えます。
@ -42,23 +42,23 @@ Electronは、レンダラープロセスのリモートオブジェクトが生
```javascript
// main process mapNumbers.js
exports.withRendererCallback = function(mapper) {
return [1,2,3].map(mapper);
exports.withRendererCallback = function (mapper) {
return [1, 2, 3].map(mapper)
}
exports.withLocalCallback = function() {
return exports.mapNumbers(function(x) {
return x + 1;
});
exports.withLocalCallback = function () {
return exports.mapNumbers(function (x) {
return x + 1
})
}
```
```javascript
// renderer process
var mapNumbers = require("remote").require("./mapNumbers");
var mapNumbers = require('remote').require('./mapNumbers')
var withRendererCb = mapNumbers.withRendererCallback(function(x) {
return x + 1;
var withRendererCb = mapNumbers.withRendererCallback(function (x) {
return x + 1
})
var withLocalCb = mapNumbers.withLocalCallback()
@ -73,9 +73,9 @@ console.log(withRendererCb, withLocalCb) // [true, true, true], [2, 3, 4]
例えば、次のコードは一目で無害なコードのように思えます。リモートオブジェクト上で`close`イベントのコールバックをインストールしています。
```javascript
remote.getCurrentWindow().on('close', function() {
remote.getCurrentWindow().on('close', function () {
// blabla...
});
})
```
りかし、明確にアンインストールするまでメインプロセスによってコールバックは参照されることを覚えておいてください。アンインストールしない場合、ウィンドウをリロードするたびに、コールバックは再度インストールされ、それぞれの再起動時にコールバックあリークします。
@ -89,7 +89,7 @@ remote.getCurrentWindow().on('close', function() {
メインプロセスの組み込みモジュールは、`remote`モジュールでゲッターとして追加されるので、`electron`モジュールのように直接それらを使用できます。
```javascript
const app = remote.app;
const app = remote.app
```
## メソッド

View file

@ -9,35 +9,35 @@
画面全体にウィンドウを作成する例:
```javascript
const electron = require('electron');
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
const electron = require('electron')
const app = electron.app
const BrowserWindow = electron.BrowserWindow
var mainWindow;
var mainWindow
app.on('ready', function() {
var electronScreen = electron.screen;
var size = electronScreen.getPrimaryDisplay().workAreaSize;
mainWindow = new BrowserWindow({ width: size.width, height: size.height });
});
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;
const electron = require('electron')
const app = electron.app
const BrowserWindow = electron.BrowserWindow
var mainWindow;
var mainWindow
app.on('ready', function() {
var electronScreen = electron.screen;
var displays = electronScreen.getAllDisplays();
var externalDisplay = null;
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;
externalDisplay = displays[i]
break
}
}
@ -45,9 +45,9 @@ app.on('ready', function() {
mainWindow = new BrowserWindow({
x: externalDisplay.bounds.x + 50,
y: externalDisplay.bounds.y + 50
});
})
}
});
})
```
## `Display` オブジェクト

View file

@ -5,12 +5,12 @@
[`BrowserWindow`](browser-window.md)のプロパティである [`webContents`](web-contents.md)プロパティの`session`を使うことで既存ページの `session`にアクセスできます。
```javascript
const BrowserWindow = require('electron').BrowserWindow;
const BrowserWindow = require('electron').BrowserWindow
var win = new BrowserWindow({ width: 800, height: 600 });
win.loadURL("http://github.com");
var win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL('http://github.com')
var ses = win.webContents.session;
var ses = win.webContents.session
```
## メソッド
@ -38,9 +38,9 @@ var ses = win.webContents.session;
`session`モジュールで、`Session`オブジェクトを作成できます:
```javascript
const session = require('electron').session;
const session = require('electron').session
var ses = session.fromPartition('persist:name');
var ses = session.fromPartition('persist:name')
```
### インスタンスイベント
@ -58,12 +58,12 @@ 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.defaultSession.on('will-download', function (event, item, webContents) {
event.preventDefault()
require('request')(item.getURL(), function (data) {
require('fs').writeFileSync('/somewhere', data)
})
})
```
### インスタンスのメソッド
@ -76,22 +76,22 @@ session.defaultSession.on('will-download', function(event, item, webContents) {
```javascript
// Query all cookies.
session.defaultSession.cookies.get({}, function(error, cookies) {
console.log(cookies);
});
session.defaultSession.cookies.get({}, function (error, cookies) {
console.log(cookies)
})
// Query all cookies associated with a specific url.
session.defaultSession.cookies.get({ url : "http://www.github.com" }, function(error, cookies) {
console.log(cookies);
});
session.defaultSession.cookies.get({ url: 'http://www.github.com' }, function (error, cookies) {
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) {
var cookie = { url: 'http://www.github.com', name: 'dummy_name', value: 'dummy' }
session.defaultSession.cookies.set(cookie, function (error) {
if (error)
console.error(error);
});
console.error(error)
})
```
#### `ses.cookies.get(filter, callback)`
@ -232,13 +232,13 @@ proxyURL = [<proxyScheme>"://"]<proxyHost>[":"<proxyPort>]
```javascript
// To emulate a GPRS connection with 50kbps throughput and 500 ms latency.
window.webContents.session.enableNetworkEmulation({
latency: 500,
downloadThroughput: 6400,
uploadThroughput: 6400
});
latency: 500,
downloadThroughput: 6400,
uploadThroughput: 6400
})
// To emulate a network outage.
window.webContents.session.enableNetworkEmulation({offline: true});
window.webContents.session.enableNetworkEmulation({offline: true})
```
#### `ses.disableNetworkEmulation()`
@ -254,12 +254,12 @@ window.webContents.session.enableNetworkEmulation({offline: true});
Calling `setCertificateVerifyProc(null)`をコールして、既定の証明書検証ロジックに戻します。
```javascript
myWindow.webContents.session.setCertificateVerifyProc(function(hostname, cert, callback) {
myWindow.webContents.session.setCertificateVerifyProc(function (hostname, cert, callback) {
if (hostname == 'github.com')
callback(true);
callback(true)
else
callback(false);
});
callback(false)
})
```
#### `ses.webRequest`
@ -275,13 +275,13 @@ APIのイベントが発生したとき、それぞれのAPIはオプション
```javascript
// Modify the user agent for all requests to the following urls.
var filter = {
urls: ["https://*.github.com/*", "*://electron.github.io"]
};
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});
});
session.defaultSession.webRequest.onBeforeSendHeaders(filter, function (details, callback) {
details.requestHeaders['User-Agent'] = 'MyAgent'
callback({cancel: false, requestHeaders: details.requestHeaders})
})
```
#### `ses.webRequest.onBeforeRequest([filter, ]listener)`

View file

@ -5,9 +5,9 @@
ユーザーのデフォルトのブラウザでURLを開く例です
```javascript
const shell = require('electron').shell;
const shell = require('electron').shell
shell.openExternal('https://github.com');
shell.openExternal('https://github.com')
```
## メソッド

View file

@ -11,14 +11,14 @@ Electron はネイティブのデスクトップアプリケーション開発
メインプロセススクリプトは普通の Node.js スクリプトのようなものです:
```javascript
const {app, BrowserWindow} = require('electron');
const {app, BrowserWindow} = require('electron')
let win = null;
let win = null
app.on('ready', () => {
win = new BrowserWindow({width: 800, height: 600});
win.loadURL('https://github.com');
});
win = new BrowserWindow({width: 800, height: 600})
win.loadURL('https://github.com')
})
```
レンダラプロセスは Node モジュールを使うための追加機能を除いて、通常のウェブページとなんら違いはありません:
@ -42,22 +42,22 @@ app.on('ready', () => {
0.37の時点で、 、[分割代入][desctructuring-assignment]でビルトインモジュールの使用をより簡単にできます:
```javascript
const {app, BrowserWindow} = require('electron');
const {app, BrowserWindow} = require('electron')
```
もし`electron`モジュール全体が必要であれば、requireして、それぞれのモジュールを`electron`からアクセスすることができます。
```javascript
const electron = require('electron');
const {app, BrowserWindow} = electron;
const electron = require('electron')
const {app, BrowserWindow} = electron
```
これは、次のコードと同じ意味を持ちます。
```javascript
const electron = require('electron');
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
const electron = require('electron')
const app = electron.app
const BrowserWindow = electron.BrowserWindow
```
[gui]: https://en.wikipedia.org/wiki/Graphical_user_interface

View file

@ -3,23 +3,23 @@
`Tray`は、オペレーティングシステムの通知エリアでアイコンで表示され、通常コンテキストメニューが付随します。
```javascript
const electron = require('electron');
const app = electron.app;
const Menu = electron.Menu;
const Tray = electron.Tray;
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 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);
});
])
appIcon.setToolTip('This is my application.')
appIcon.setContextMenu(contextMenu)
})
```

View file

@ -5,9 +5,9 @@
現在のページの倍率を200%にする例です。
```javascript
var webFrame = require('electron').webFrame;
var webFrame = require('electron').webFrame
webFrame.setZoomFactor(2);
webFrame.setZoomFactor(2)
```
## メソッド
@ -55,11 +55,11 @@ inputフィールドやtextエリアでスペルチェックの提供を設定
プロバイダーとして[node-spellchecker][spellchecker]を使用する例です:
```javascript
webFrame.setSpellCheckProvider("en-US", true, {
spellCheck: function(text) {
return !(require('spellchecker').isMisspelled(text));
webFrame.setSpellCheckProvider('en-US', true, {
spellCheck: function (text) {
return !(require('spellchecker').isMisspelled(text))
}
});
})
```
### `webFrame.registerURLSchemeAsSecure(scheme)`

View file

@ -185,8 +185,8 @@ Electronアプリ内でウェブページのような外部コンテンツを埋
```javascript
webview.addEventListener('dom-ready', () => {
webview.openDevTools();
});
webview.openDevTools()
})
```
### `<webview>.loadURL(url[, options])`
@ -558,8 +558,8 @@ HTML APIでフルスクリーンでなくなった際に発生します。
```javascript
webview.addEventListener('console-message', (e) => {
console.log('Guest page logged a message:', e.message);
});
console.log('Guest page logged a message:', e.message)
})
```
### Event: 'found-in-page'
@ -578,10 +578,10 @@ webview.addEventListener('console-message', (e) => {
```javascript
webview.addEventListener('found-in-page', (e) => {
if (e.result.finalUpdate)
webview.stopFindInPage('keepSelection');
});
webview.stopFindInPage('keepSelection')
})
const requestId = webview.findInPage('test');
const requestId = webview.findInPage('test')
```
### Event: 'new-window'
@ -599,14 +599,14 @@ const requestId = webview.findInPage('test');
下記のサンプルは、新しいURLをシステムのデフォルトブラウザで開きます。
```javascript
const {shell} = require('electron');
const {shell} = require('electron')
webview.addEventListener('new-window', (e) => {
const protocol = require('url').parse(e.url).protocol;
const protocol = require('url').parse(e.url).protocol
if (protocol === 'http:' || protocol === 'https:') {
shell.openExternal(e.url);
shell.openExternal(e.url)
}
});
})
```
### Event: 'will-navigate'
@ -656,8 +656,8 @@ webview.addEventListener('new-window', (e) => {
```javascript
webview.addEventListener('close', () => {
webview.src = 'about:blank';
});
webview.src = 'about:blank'
})
```
### Event: 'ipc-message'
@ -674,18 +674,18 @@ webview.addEventListener('close', () => {
```javascript
// 埋め込み元ページ(<webview>があるページ)で
webview.addEventListener('ipc-message', (event) => {
console.log(event.channel);
console.log(event.channel)
// Prints "pong"
});
webview.send('ping');
})
webview.send('ping')
```
```javascript
// ゲストページ(<webview>内)で
const {ipcRenderer} = require('electron');
const {ipcRenderer} = require('electron')
ipcRenderer.on('ping', () => {
ipcRenderer.sendToHost('pong');
});
ipcRenderer.sendToHost('pong')
})
```
### Event: 'crashed'

View file

@ -22,17 +22,17 @@ Node.js の新しいバージョンがリリースされたとき、私たちは
// In the main process.
global.sharedObject = {
someProperty: 'default value'
};
}
```
```javascript
// In page 1.
require('remote').getGlobal('sharedObject').someProperty = 'new value';
require('remote').getGlobal('sharedObject').someProperty = 'new value'
```
```javascript
// In page 2.
console.log(require('remote').getGlobal('sharedObject').someProperty);
console.log(require('remote').getGlobal('sharedObject').someProperty)
```
## 何分か経つと、アプリの Window/tray が消えてしまいます
@ -49,17 +49,17 @@ console.log(require('remote').getGlobal('sharedObject').someProperty);
変更前:
```javascript
app.on('ready', function() {
var tray = new Tray('/path/to/icon.png');
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');
var tray = null
app.on('ready', function () {
tray = new Tray('/path/to/icon.png')
})
```
@ -75,7 +75,7 @@ var win = new BrowserWindow({
webPreferences: {
nodeIntegration: false
}
});
})
```
しかし、Node.jsとElectron APIを使用した機能を維持したい場合は、ほかのライブラリを読み込む前に、ページのシンボルをリネームする必要があります。
@ -106,7 +106,7 @@ Uncaught TypeError: Cannot read property 'setZoomLevel' of undefined
正しい組み込みモジュールを使用しているかを確認するために、`electron`モジュールのパスを出力します。
```javascript
console.log(require.resolve('electron'));
console.log(require.resolve('electron'))
```
そして、次の形式かどうかを確認します。

View file

@ -43,29 +43,29 @@ $ asar list /path/to/example.asar
`asar` アーカイブ内のファイルを読み込む:
```javascript
const fs = require('fs');
fs.readFileSync('/path/to/example.asar/file.txt');
const fs = require('fs')
fs.readFileSync('/path/to/example.asar/file.txt')
```
アーカイブのルート直下にあるすべてのファイルを一覧にする:
```javascript
const fs = require('fs');
fs.readdirSync('/path/to/example.asar');
const fs = require('fs')
fs.readdirSync('/path/to/example.asar')
```
アーカイブからモジュールを使用する:
```javascript
require('/path/to/example.asar/dir/module.js');
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');
const {BrowserWindow} = require('electron')
let win = new BrowserWindow({width: 800, height: 600})
win.loadURL('file:///path/to/example.asar/static/index.html')
```
### Web API
@ -89,15 +89,15 @@ $.get('file:///path/to/example.asar/file.txt', (data) => {
アーカイブのチェックサムを検証する等の幾つかのケースでは、`asar` アーカイブをファイルとして読み込む必要があります。この目的のために、 `asar` サポートしないオリジナルの `fs` API を提供するビルトインの `original-fs` モジュールを使用できます。
```javascript
const originalFs = require('original-fs');
originalFs.readFileSync('/path/to/example.asar');
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');
process.noAsar = true
fs.readFileSync('/path/to/example.asar')
```
## Node API の制限

View file

@ -14,11 +14,11 @@
```javascript
let myNotification = new Notification('Title', {
body: 'Lorem Ipsum Dolor Sit Amet'
});
})
myNotification.onclick = () => {
console.log('Notification clicked');
};
console.log('Notification clicked')
}
```
オペレーティングシステム間でコードとユーザ体験は似ていますが、細かい違いがあります。
@ -57,13 +57,13 @@ __Application dock menu:__
最近のドキュメントにファイルを追加するために、[app.addRecentDocument][addrecentdocument] APIを使用できます:
```javascript
app.addRecentDocument('/Users/USERNAME/Desktop/work.type');
app.addRecentDocument('/Users/USERNAME/Desktop/work.type')
```
[app.clearRecentDocuments][clearrecentdocuments] API を使用して、最近のドキュメント一覧を空にできます:
```javascript
app.clearRecentDocuments();
app.clearRecentDocuments()
```
### Windows 留意点
@ -87,19 +87,19 @@ __Dock menu of Terminal.app:__
カスタムドックメニューを設定するために、macOSのみに提供されている `app.dock.setMenu` APIを使用できます。
```javascript
const electron = require('electron');
const app = electron.app;
const Menu = electron.Menu;
const electron = require('electron')
const app = electron.app
const Menu = electron.Menu
const dockMenu = Menu.buildFromTemplate([
{ label: 'New Window', click() { console.log('New Window'); } },
{ 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);
])
app.dock.setMenu(dockMenu)
```
## ユーザータスク (Windows)
@ -129,13 +129,13 @@ app.setUserTasks([
title: 'New Window',
description: 'Create a new window'
}
]);
])
```
タスクリストをクリアするために、`app.setUserTasks` をコールし、配列を空にします。
```javascript
app.setUserTasks([]);
app.setUserTasks([])
```
アプリケーションを閉じた後もユーザータスクは表示されていてるので、アプリケーションをアンインストールするまではタスクに指定したアイコンとプログラムのパスは存在し続けてる必要があります。
@ -156,32 +156,32 @@ __Windows Media Playerの縮小表示ツールバー:__
アプリケーションに縮小表示ツールバーを設定するために、[BrowserWindow.setThumbarButtons][setthumbarbuttons]を使えます:
```javascript
const {BrowserWindow} = require('electron');
const path = require('path');
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"); }
click () { console.log('button2 clicked') }
},
{
tooltip: 'button2',
icon: path.join(__dirname, 'button2.png'),
flags: ['enabled', 'dismissonclick'],
click() { console.log("button2 clicked."); }
click () { console.log('button2 clicked.') }
}
]);
])
```
縮小表示ツールバーボタンをクリアするために、 `BrowserWindow.setThumbarButtons` をコールして配列を空にします:
```javascript
win.setThumbarButtons([]);
win.setThumbarButtons([])
```
## Unity ランチャーショートカット (Linux)

View file

@ -18,14 +18,14 @@ $ git clone --recursive https://github.com/facebook/react-devtools.git
複数のウィンドウで、DevToolsを開くために、Electronでエクステンションをロードし、DevToolsコンソールで次のコードを実行します。
```javascript
const BrowserWindow = require('electron').remote.BrowserWindow;
BrowserWindow.addDevToolsExtension('/some-directory/react-devtools/shells/chrome');
const BrowserWindow = require('electron').remote.BrowserWindow
BrowserWindow.addDevToolsExtension('/some-directory/react-devtools/shells/chrome')
```
エクステンションをアンロードするために、`BrowserWindow.removeDevToolsExtension` APIを名前を指定してコールすると、次回DevToolsを開いた時にはロードされません。
```javascript
BrowserWindow.removeDevToolsExtension('React Developer Tools');
BrowserWindow.removeDevToolsExtension('React Developer Tools')
```
## DevTools エクステンションのフォーマット

View file

@ -5,16 +5,16 @@
_main.js_
```javascript
const electron = require('electron');
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
const electron = require('electron')
const app = electron.app
const BrowserWindow = electron.BrowserWindow
let onlineStatusWindow;
let onlineStatusWindow
app.on('ready', () => {
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false });
onlineStatusWindow.loadURL(`file://${__dirname}/online-status.html`);
});
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false })
onlineStatusWindow.loadURL(`file://${__dirname}/online-status.html`)
})
```
_online-status.html_
@ -42,21 +42,21 @@ _online-status.html_
_main.js_
```javascript
const electron = require('electron');
const app = electron.app;
const ipcMain = electron.ipcMain;
const BrowserWindow = electron.BrowserWindow;
const electron = require('electron')
const app = electron.app
const ipcMain = electron.ipcMain
const BrowserWindow = electron.BrowserWindow
let onlineStatusWindow;
let onlineStatusWindow
app.on('ready', () => {
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false });
onlineStatusWindow.loadURL(`file://${__dirname}/online-status.html`);
});
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);
});
console.log(status)
})
```
_online-status.html_

View file

@ -52,52 +52,52 @@ __注記__ `package.json` に `main` が存在しない場合、Electron は
`main.js` ではウィンドウを作成してシステムイベントを管理します。典型的な例は次のようになります:
```javascript
const electron = require('electron');
const electron = require('electron')
// アプリケーションを操作するモジュール
const {app} = electron;
const {app} = electron
// ネイティブブラウザウィンドウを作成するモジュール
const {BrowserWindow} = electron;
const {BrowserWindow} = electron
// ウィンドウオブジェクトをグローバル参照をしておくこと。
// しないと、ガベージコレクタにより自動的に閉じられてしまう。
let win;
let win
function createWindow() {
function createWindow () {
// ブラウザウィンドウの作成
win = new BrowserWindow({width: 800, height: 600});
win = new BrowserWindow({width: 800, height: 600})
// アプリケーションのindex.htmlの読み込み
win.loadURL(`file://${__dirname}/index.html`);
win.loadURL(`file://${__dirname}/index.html`)
// DevToolsを開く
win.webContents.openDevTools();
win.webContents.openDevTools()
// ウィンドウが閉じられた時に発行される
win.on('closed', () => {
// ウィンドウオブジェクトを参照から外す。
// もし何個かウィンドウがあるならば、配列として持っておいて、対応するウィンドウのオブジェクトを消去するべき。
win = null;
});
win = null
})
}
// このメソッドはElectronが初期化を終えて、ブラウザウィンドウを作成可能になった時に呼び出される。
// 幾つかのAPIはこのイベントの後でしか使えない。
app.on('ready', createWindow);
app.on('ready', createWindow)
// すべてのウィンドウが閉じられた時にアプリケーションを終了する。
app.on('window-all-closed', () => {
// macOSでは、Cmd + Q(終了)をユーザーが実行するまではウィンドウが全て閉じられても終了しないでおく。
if (process.platform !== 'darwin') {
app.quit();
app.quit()
}
});
})
app.on('activate', () => {
// macOS では、ドックをクリックされた時にウィンドウがなければ新しく作成する。
if (win === null) {
createWindow();
createWindow()
}
});
})
// このファイルでアプリケーション固有のメインプロセスのコードを読み込むことができる。
// ファイルを別に分けておいてここでrequireすることもできる。

View file

@ -18,22 +18,22 @@ macOSとLinuxでは、Pepper Flashプラグインの詳細は、Chromeブラウ
// 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');
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.commandLine.appendSwitch('ppapi-flash-version', '17.0.0.169')
app.on('ready', function() {
app.on('ready', function () {
mainWindow = new BrowserWindow({
'width': 800,
'height': 600,
'web-preferences': {
'plugins': true
}
});
mainWindow.loadURL('file://' + __dirname + '/index.html');
})
mainWindow.loadURL('file://' + __dirname + '/index.html')
// Something else
});
})
```
## `<webview>` タグでFlashプラグインを有効化

View file

@ -72,7 +72,7 @@ $ npm install selenium-webdriver
Electronでの `selenium-webdriver` 使用方法は、chrome driverへの接続方法とElectronバイナリがどこにあるかをマニュアルで指定する以外は、upstreamと基本的に同じです。
```javascript
const webdriver = require('selenium-webdriver');
const webdriver = require('selenium-webdriver')
const driver = new webdriver.Builder()
// The "9515" is the port opened by chrome driver.
@ -80,22 +80,22 @@ const driver = new webdriver.Builder()
.withCapabilities({
chromeOptions: {
// Here is the path to your Electron binary.
binary: '/Path-to-Your-App.app/Contents/MacOS/Electron',
binary: '/Path-to-Your-App.app/Contents/MacOS/Electron'
}
})
.forBrowser('electron')
.build();
.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.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();
driver.quit()
```
## WebdriverIOのセットアップをする
@ -123,20 +123,20 @@ $ npm install webdriverio
### 3. chrome driverに接続する
```javascript
const webdriverio = require('webdriverio');
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/
}
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);
let client = webdriverio.remote(options)
client
.init()
@ -144,9 +144,9 @@ client
.setValue('#q', 'webdriverio')
.click('#btnG')
.getTitle().then((title) => {
console.log('Title was: ' + title);
console.log('Title was: ' + title)
})
.end();
.end()
```
## ワークフロー

View file

@ -35,19 +35,19 @@ __Note:__ `widevinecdmadapter` バイナリはElectronにパスが通ってい
// * `widevinecdmadapter.plugin` on macOS,
// * `libwidevinecdmadapter.so` on Linux,
// * `widevinecdmadapter.dll` on Windows.
app.commandLine.appendSwitch('widevine-cdm-path', '/path/to/widevinecdmadapter.plugin');
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');
app.commandLine.appendSwitch('widevine-cdm-version', '1.4.8.866')
let win = null;
let win = null
app.on('ready', () => {
win = new BrowserWindow({
webPreferences: {
// The `plugins` have to be enabled.
plugins: true
}
});
});
})
})
```
## プラグインの検証

View file

@ -165,7 +165,7 @@ console.log(webFrame.getResourceUsage())
cssStyleSheets: { /* same with "images" */ },
xslStyleSheets: { /* same with "images" */ },
fonts: { /* same with "images" */ },
other: { /* same with "images" */ },
other: { /* same with "images" */ }
}
```

View file

@ -5,10 +5,10 @@ O módulo `app` é responsável por controlar o ciclo de vida do aplicativo.
O exemplo a seguir mostra como fechar o aplicativo quando a última janela é fechada:
```javascript
const app = require('electron').app;
app.on('window-all-closed', function() {
app.quit();
});
const app = require('electron').app
app.on('window-all-closed', function () {
app.quit()
})
```
## Eventos
@ -152,15 +152,15 @@ para confiar no certificado, você deve impedir o comportamento padrão com
`event.preventDefault()` e chamar `callback(true)`.
```javascript
session.on('certificate-error', function(event, webContents, url, error, certificate, callback) {
if (url == "https://github.com") {
session.on('certificate-error', function (event, webContents, url, error, certificate, callback) {
if (url == 'https://github.com') {
// Lógica de verificação.
event.preventDefault();
callback(true);
event.preventDefault()
callback(true)
} else {
callback(false);
callback(false)
}
});
})
```
### Evento: 'select-client-certificate'
@ -183,9 +183,9 @@ Usar `event.preventDefault()` impede o aplicativo de usar o primeiro certificado
da memória.
```javascript
app.on('select-client-certificate', function(event, webContents, url, list, callback) {
event.preventDefault();
callback(list[0]);
app.on('select-client-certificate', function (event, webContents, url, list, callback) {
event.preventDefault()
callback(list[0])
})
```
@ -214,9 +214,9 @@ isto, você deve impedir esse comportamento com `event.preventDefault()` e
chamar `callback(username, password)` com as credenciais.
```javascript
app.on('login', function(event, webContents, request, authInfo, callback) {
event.preventDefault();
callback('username', 'secret');
app.on('login', function (event, webContents, request, authInfo, callback) {
event.preventDefault()
callback('username', 'secret')
})
```

View file

@ -3,15 +3,15 @@
A classe `BrowserWindow` lhe dá a habilidade de criar uma janela do browser. Por exemplo:
```javascript
const BrowserWindow = require('electron').BrowserWindow;
const BrowserWindow = require('electron').BrowserWindow
var win = new BrowserWindow({ width: 800, height: 600, show: false });
win.on('closed', function() {
win = null;
});
var win = new BrowserWindow({ width: 800, height: 600, show: false })
win.on('closed', function () {
win = null
})
win.loadURL('https://github.com');
win.show();
win.loadURL('https://github.com')
win.show()
```
Você também pode criar uma janela sem o chrome utilizando a API [Frameless Window](../../../docs/api/frameless-window.md).
@ -109,16 +109,16 @@ Emitido quando a janela for fechar. É emitido antes dos eventos `beforeunload`
Normalmente você utiliza o manipulador de eventos do `beforeunload` para decidir se a janela deve ser fechada, que também será chamado quando a janela é recarregada. No Electron, retornar uma string vazia ou `false` cancela o fechamento. Por exemplo:
```javascript
window.onbeforeunload = function(e) {
console.log('Não quero ser fechada');
window.onbeforeunload = function (e) {
console.log('Não quero ser fechada')
// Diferente de navegadores comuns, nos quais uma string deve ser retornada e
// o usuário deve confirmar se a janela será fechada, o Electron dá mais opções
// aos desenvolvedores. Retornar uma string vazia ou false cancela o fechamento.
// Você também pode usar a API de diálogo para deixar que o usuário confirme o
// fechamento do aplicativo.
e.returnValue = false;
};
e.returnValue = false
}
```
### Evento: 'closed'
@ -192,12 +192,12 @@ Emitido quando a janela sai do estado de tela cheia, ocasionado por uma api de h
Emitido quando um [App Command](https://msdn.microsoft.com/en-us/library/windows/desktop/ms646275(v=vs.85).aspx) é invocado. Estes estão tipicamente relacionado às teclas de mídia do teclado, ou comandos do browser, assim como o botão "Voltar" existente em alguns modelos de mouse no Windows.
```js
someWindow.on('app-command', function(e, cmd) {
someWindow.on('app-command', function (e, cmd) {
// Navega a janela 'para trás' quando o usuário pressiona o botão voltar do mouse
if (cmd === 'browser-backward' && someWindow.webContents.canGoBack()) {
someWindow.webContents.goBack();
someWindow.webContents.goBack()
}
});
})
```
## Métodos
@ -244,7 +244,7 @@ Objetos criados com `new BrowserWindow` possuem as seguintes propriedades:
```javascript
// Neste exemplo `win` é a nossa instância
var win = new BrowserWindow({ width: 800, height: 600 });
var win = new BrowserWindow({ width: 800, height: 600 })
```
### `win.webContents`

View file

@ -9,9 +9,9 @@ Por exemplo:
```javascript
app.on('ready', () => {
require('electron').powerMonitor.on('suspend', () => {
console.log('O sistema está indo dormir');
});
});
console.log('O sistema está indo dormir')
})
})
```
## Eventos

View file

@ -18,12 +18,12 @@ Pode ser utilizado pelo script pré-carregamento (preload.js abaixo) para adicio
```js
// preload.js
var _setImmediate = setImmediate;
var _clearImmediate = clearImmediate;
process.once('loaded', function() {
global.setImmediate = _setImmediate;
global.clearImmediate = _clearImmediate;
});
var _setImmediate = setImmediate
var _clearImmediate = clearImmediate
process.once('loaded', function () {
global.setImmediate = _setImmediate
global.clearImmediate = _clearImmediate
})
```
## Propriedades

View file

@ -5,8 +5,8 @@ O módulo `shell` fornece funções relacionadas à integração com o desktop.
Um exemplo para abrir uma URL no browser padrão do usuário:
```javascript
const shell = require('shell');
shell.openExternal('https://github.com');
const shell = require('shell')
shell.openExternal('https://github.com')
```
## Métodos

View file

@ -71,7 +71,7 @@ O evento é uma cadeia que é utilizada após um `.on` em um método listner. Se
crie algo parecido com o exemplo abaixo:
```javascript
Alarm.on('wake-up', function(time) {
Alarm.on('wake-up', function (time) {
console.log(time)
})
```

View file

@ -49,29 +49,29 @@ $ asar list /path/to/example.asar
Lendo um arquivo em pacote `asar`:
```javascript
var fs = require('fs');
fs.readFileSync('/path/to/example.asar/file.txt');
var fs = require('fs')
fs.readFileSync('/path/to/example.asar/file.txt')
```
Listando todos os arquivos a partir da raiz:
```javascript
var fs = require('fs');
fs.readdirSync('/path/to/example.asar');
var fs = require('fs')
fs.readdirSync('/path/to/example.asar')
```
Utilizando um módulo dentro do pacote `asar`:
```javascript
require('/path/to/example.asar/dir/module.js');
require('/path/to/example.asar/dir/module.js')
```
Você também pode renderizar uma página web apartir de um arquivo `asar` utilizando o módulo `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');
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
@ -97,8 +97,8 @@ o arquivo `asar` como um arquivo normal. Para isto, você pode usar o built-in
`original-fs` que fornece a API `fs`, sem apoio a arquivos asar`:
```javascript
var originalFs = require('original-fs');
originalFs.readFileSync('/path/to/example.asar');
var originalFs = require('original-fs')
originalFs.readFileSync('/path/to/example.asar')
```
## Limitaçõs na API Node

View file

@ -25,15 +25,15 @@ Para adicionar um arquivo para os documentos recentes, você pode usar a API
[app.addRecentDocument][addrecentdocument]:
```javascript
var app = require('app');
app.addRecentDocument('/Users/USERNAME/Desktop/work.type');
var app = require('app')
app.addRecentDocument('/Users/USERNAME/Desktop/work.type')
```
E você pode usar a API [app.clearRecentDocuments][clearrecentdocuments] para
limpar a lista de documentos recentes.
```javascript
app.clearRecentDocuments();
app.clearRecentDocuments()
```
### Notas para Windows
@ -67,17 +67,17 @@ Para criar seu Dock Menu customizado, você pode usar a API `app.dock.setMenu`,
ela está disponível apenas no macOS:
```javascript
var app = require('app');
var Menu = require('menu');
var app = require('app')
var Menu = require('menu')
var dockMenu = Menu.buildFromTemplate([
{ label: 'New Window', click: function() { console.log('New Window'); } },
{ 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);
])
app.dock.setMenu(dockMenu)
```
## Tarefas do Usuário (Windows)
@ -114,7 +114,7 @@ Para setar tarefas do usuário para sua aplicação, você pode usar a API
[app.setUserTasks][setusertaskstasks]:
```javascript
var app = require('app');
var app = require('app')
app.setUserTasks([
{
program: process.execPath,
@ -124,14 +124,14 @@ app.setUserTasks([
title: 'New Window',
description: 'Create a new window'
}
]);
])
```
Para limpar sua lista de tarefas, apenas chame `app.setUserTasks` com um
array vazio.
```javascript
app.setUserTasks([]);
app.setUserTasks([])
```
As tarefas do usuário são exibidas mesmo depois da aplicação ser fechada,
@ -189,7 +189,7 @@ Para limpar os botões na miniatura da barra de ferramentas, apenas chame
`BrowserWindow.setThumbarButtons` com um array vazio.
```javascript
win.setThumbarButtons([]);
win.setThumbarButtons([])
```
## Unity Launcher Shortcuts (Linux)

View file

@ -18,15 +18,15 @@ Siga as instruções em [`react-devtools/shells/chrome/Readme.md`](https://gith
Agora você poderá carregar a extensão no Electron abrindo o DevTools em qualquer janela, e executando o seguinte código no console do DevTools:
```javascript
const BrowserWindow = require('electron').remote.BrowserWindow;
BrowserWindow.addDevToolsExtension('/some-directory/react-devtools/shells/chrome');
const BrowserWindow = require('electron').remote.BrowserWindow
BrowserWindow.addDevToolsExtension('/some-directory/react-devtools/shells/chrome')
```
Para remover a extensão, você pode executar a chamada `BrowserWindow.removeDevToolsExtension`
com o nome da extensão e ela não será carregada na próxima vez que você abrir o DevTools:
```javascript
BrowserWindow.removeDevToolsExtension('React Developer Tools');
BrowserWindow.removeDevToolsExtension('React Developer Tools')
```
## Formato das extensões DevTools

View file

@ -7,14 +7,14 @@ a seguir:
_main.js_
```javascript
var app = require('app');
var BrowserWindow = require('browser-window');
var onlineStatusWindow;
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');
});
app.on('ready', function () {
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false })
onlineStatusWindow.loadURL('file://' + __dirname + '/online-status.html')
})
```
_online-status.html_
@ -46,19 +46,19 @@ pode ver isto no exemplo abaixo:
_main.js_
```javascript
var app = require('app');
var ipc = require('ipc');
var BrowserWindow = require('browser-window');
var onlineStatusWindow;
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');
});
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);
});
ipc.on('online-status-changed', function (event, status) {
console.log(status)
})
```
_online-status.html_

View file

@ -20,40 +20,40 @@ para a linha de comando do Electron ou usando o método
Por exemplo:
```javascript
var app = require('app');
var BrowserWindow = require('browser-window');
var app = require('app')
var BrowserWindow = require('browser-window')
// Mantém uma referência global da janela, se não manter, a janela irá fechar
// automaticamente quando o objeto javascript for GCed.
var mainWindow = null;
var mainWindow = null
// Sai assim que todas as janelas forem fechadas.
app.on('window-all-closed', function() {
app.on('window-all-closed', function () {
if (process.platform != 'darwin') {
app.quit();
app.quit()
}
});
})
// Epecifica o caminho do flash.
// No Windows, deve ser /path/to/pepflashplayer.dll
// No macOS, /path/to/PepperFlashPlayer.plugin
// No Linux, /path/to/libpepflashplayer.so
app.commandLine.appendSwitch('ppapi-flash-path', '/path/to/libpepflashplayer.so');
app.commandLine.appendSwitch('ppapi-flash-path', '/path/to/libpepflashplayer.so')
// Especifica a versão do flash, por exemplo, v17.0.0.169
app.commandLine.appendSwitch('ppapi-flash-version', '17.0.0.169');
app.commandLine.appendSwitch('ppapi-flash-version', '17.0.0.169')
app.on('ready', function() {
app.on('ready', function () {
mainWindow = new BrowserWindow({
'width': 800,
'height': 600,
'web-preferences': {
'plugins': true
}
});
mainWindow.loadURL('file://' + __dirname + '/index.html');
})
mainWindow.loadURL('file://' + __dirname + '/index.html')
// Algo mais
});
})
```
## Ative o plugin Flash na tag `<webview>`

View file

@ -49,29 +49,29 @@ $ asar list /path/to/example.asar
Прочитаеем файл в архиве `asar`:
```javascript
const fs = require('fs');
fs.readFileSync('/path/to/example.asar/file.txt');
const fs = require('fs')
fs.readFileSync('/path/to/example.asar/file.txt')
```
Список всех файлов начиная от корня архива:
```javascript
const fs = require('fs');
fs.readdirSync('/path/to/example.asar');
const fs = require('fs')
fs.readdirSync('/path/to/example.asar')
```
Используем модуль из архива:
```javascript
require('/path/to/example.asar/dir/module.js');
require('/path/to/example.asar/dir/module.js')
```
Вы также можете показывать веб-страницы из архива `asar` через `BrowserWindow`:
```javascript
const BrowserWindow = require('electron').BrowserWindow;
var win = new BrowserWindow({width: 800, height: 600});
win.loadURL('file:///path/to/example.asar/static/index.html');
const BrowserWindow = require('electron').BrowserWindow
var win = new BrowserWindow({width: 800, height: 600})
win.loadURL('file:///path/to/example.asar/static/index.html')
```
### Веб API
@ -98,16 +98,16 @@ $.get('file:///path/to/example.asar/file.txt', function(data) {
`original-fs`, который предоставляет доступ к `fs` без поддежки `asar`:
```javascript
var originalFs = require('original-fs');
originalFs.readFileSync('/path/to/example.asar');
var originalFs = require('original-fs')
originalFs.readFileSync('/path/to/example.asar')
```
Вы также можете выставить `process.noAsar` в `true`, чтобы выключить поддержку `asar`
в модуле `fs`:
```javascript
process.noAsar = true;
fs.readFileSync('/path/to/example.asar');
process.noAsar = true
fs.readFileSync('/path/to/example.asar')
```
## Ограничения Node API

View file

@ -105,32 +105,32 @@ function createWindow () {
})
}
//Этот метод будет вызван, когда Electron закончит инициализацию
//и будет готов создавать окна браузера.
//Некоторые API возможно использовать только после того, как
//это произойдёт.
// Этот метод будет вызван, когда Electron закончит инициализацию
// и будет готов создавать окна браузера.
// Некоторые API возможно использовать только после того, как
// это произойдёт.
app.on('ready', createWindow)
// Выйти, если все окна закрыты
app.on('window-all-closed', function () {
//На macOS приложение и его строка меню обычно остаются активными,
//пока пользователь не завершит их с помощью `Cmd + Q`.
// На macOS приложение и его строка меню обычно остаются активными,
// пока пользователь не завершит их с помощью `Cmd + Q`.
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', function () {
//На macOS приложение обычно пересоздаёт окно, когда
//пользователь кликает на его иконку в доке, если не открыто
//других окон.
// На macOS приложение обычно пересоздаёт окно, когда
// пользователь кликает на его иконку в доке, если не открыто
// других окон.
if (mainWindow === null) {
createWindow()
}
})
//В этот файл Вы можете включить остальной код вашего главного процесса.
//Вы также можете разложить его по отдельным файлам и подключить с помощью require.
// В этот файл Вы можете включить остальной код вашего главного процесса.
// Вы также можете разложить его по отдельным файлам и подключить с помощью require.
```

View file

@ -89,7 +89,7 @@ a value it and its type is noted below. If you were to listen and respond to
this event it might look something like this:
```javascript
Alarm.on('wake-up', function(time) {
Alarm.on('wake-up', function (time) {
console.log(time)
})
```

View file

@ -91,7 +91,7 @@ a value it and its type is noted below. If you were to listen and respond to
this event it might look something like this:
```javascript
Alarm.on('wake-up', function(time) {
Alarm.on('wake-up', function (time) {
console.log(time)
})
```

View file

@ -5,10 +5,10 @@
下面的这个例子将会展示如何在最后一个窗口被关闭时退出应用:
```javascript
var app = require('app');
app.on('window-all-closed', function() {
app.quit();
});
var app = require('app')
app.on('window-all-closed', function () {
app.quit()
})
```
## 事件列表
@ -143,15 +143,15 @@ app.on('window-all-closed', function() {
调用 `callback(true)`
```javascript
session.on('certificate-error', function(event, webContents, url, error, certificate, callback) {
if (url == "https://github.com") {
session.on('certificate-error', function (event, webContents, url, error, certificate, callback) {
if (url == 'https://github.com') {
// 验证逻辑。
event.preventDefault();
callback(true);
event.preventDefault()
callback(true)
} else {
callback(false);
callback(false)
}
});
})
```
### 事件:'select-client-certificate'
@ -174,9 +174,9 @@ session.on('certificate-error', function(event, webContents, url, error, certifi
需要通过调用 `event.preventDefault()` 来防止应用自动使用第一个证书进行验证。如下所示:
```javascript
app.on('select-certificate', function(event, host, url, list, callback) {
event.preventDefault();
callback(list[0]);
app.on('select-certificate', function (event, host, url, list, callback) {
event.preventDefault()
callback(list[0])
})
```
### 事件: 'login'
@ -203,9 +203,9 @@ app.on('select-certificate', function(event, host, url, list, callback) {
`callback(username, password)` 来进行验证。
```javascript
app.on('login', function(event, webContents, request, authInfo, callback) {
event.preventDefault();
callback('username', 'secret');
app.on('login', function (event, webContents, request, authInfo, callback) {
event.preventDefault()
callback('username', 'secret')
})
```
### 事件:'gpu-process-crashed'
@ -401,23 +401,23 @@ app.on('ready', function() {
举个例子:
```js
let browserOptions = {width: 1000, height: 800};
let browserOptions = {width: 1000, height: 800}
// 只有平台支持的时候才使用透明窗口
if (process.platform !== 'win32' || app.isAeroGlassEnabled()) {
browserOptions.transparent = true;
browserOptions.frame = false;
browserOptions.transparent = true
browserOptions.frame = false
}
// 创建窗口
win = new BrowserWindow(browserOptions);
win = new BrowserWindow(browserOptions)
// 转到某个网页
if (browserOptions.transparent) {
win.loadURL('file://' + __dirname + '/index.html');
win.loadURL('file://' + __dirname + '/index.html')
} else {
// 没有透明特效,我们应该用某个只包含基本样式的替代解决方案。
win.loadURL('file://' + __dirname + '/fallback.html');
win.loadURL('file://' + __dirname + '/fallback.html')
}
```
### `app.commandLine.appendSwitch(switch[, value])`

View file

@ -4,18 +4,18 @@
```javascript
// In the main process.
const BrowserWindow = require('electron').BrowserWindow;
const BrowserWindow = require('electron').BrowserWindow
// Or in the renderer process.
const BrowserWindow = require('electron').remote.BrowserWindow;
const BrowserWindow = require('electron').remote.BrowserWindow
var win = new BrowserWindow({ width: 800, height: 600, show: false });
win.on('closed', function() {
win = null;
});
var win = new BrowserWindow({ width: 800, height: 600, show: false })
win.on('closed', function () {
win = null
})
win.loadURL('https://github.com');
win.show();
win.loadURL('https://github.com')
win.show()
```
你也可以不通过chrome创建窗口使用
@ -151,15 +151,15 @@ win.show();
通常你想通过 `beforeunload` 处理器来决定是否关闭窗口,但是它也会在窗口重载的时候被触发. 在 Electron 中,返回一个空的字符串或 `false` 可以取消关闭.例如:
```javascript
window.onbeforeunload = function(e) {
console.log('I do not want to be closed');
window.onbeforeunload = function (e) {
console.log('I do not want to be closed')
// Unlike usual browsers, in which a string should be returned and the user is
// prompted to confirm the page unload, Electron gives developers more options.
// Returning empty string or false would prevent the unloading now.
// You can also use the dialog API to let the user confirm closing the application.
e.returnValue = false;
};
e.returnValue = false
}
```
### Event: 'closed'
@ -234,12 +234,12 @@ window.onbeforeunload = function(e) {
典型的是键盘媒体或浏览器命令, Windows上的 "Back" 按钮用作鼠标也会触发.
```js
someWindow.on('app-command', function(e, cmd) {
someWindow.on('app-command', function (e, cmd) {
// Navigate the window back when the user hits their mouse back button
if (cmd === 'browser-backward' && someWindow.webContents.canGoBack()) {
someWindow.webContents.goBack();
someWindow.webContents.goBack()
}
});
})
```
### Event: 'scroll-touch-begin' _macOS_
@ -294,7 +294,7 @@ someWindow.on('app-command', function(e, cmd) {
```javascript
// In this example `win` is our instance
var win = new BrowserWindow({ width: 800, height: 600 });
var win = new BrowserWindow({ width: 800, height: 600 })
```
### `win.webContents`

View file

@ -3,13 +3,13 @@
这页列出了Chrome浏览器和Electron支持的命令行开关. 你也可以在[app][app]模块的[ready][ready]事件发出之前使用[app.commandLine.appendSwitch][append-switch] 来添加它们到你应用的main脚本里面:
```javascript
const app = require('electron').app;
app.commandLine.appendSwitch('remote-debugging-port', '8315');
app.commandLine.appendSwitch('host-rules', 'MAP * 127.0.0.1');
const app = require('electron').app
app.commandLine.appendSwitch('remote-debugging-port', '8315')
app.commandLine.appendSwitch('host-rules', 'MAP * 127.0.0.1')
app.on('ready', function() {
app.on('ready', function () {
// Your code here
});
})
```
## --client-certificate=`path`

View file

@ -4,15 +4,15 @@
下面例子展示了如何将一个字符串写道 clipboard 上:
```javascript
const clipboard = require('electron').clipboard;
clipboard.writeText('Example String');
const clipboard = require('electron').clipboard
clipboard.writeText('Example String')
```
在 X Window 系统上, 有一个可选的 clipboard. 你可以为每个方法使用 `selection` 来控制它:
```javascript
clipboard.writeText('Example String', 'selection');
console.log(clipboard.readText('selection'));
clipboard.writeText('Example String', 'selection')
console.log(clipboard.readText('selection'))
```
## 方法
@ -93,7 +93,7 @@ console.log(clipboard.readText('selection'));
返回 clipboard 是否支持指定 `data` 的格式.
```javascript
console.log(clipboard.has('<p>selection</p>'));
console.log(clipboard.has('<p>selection</p>'))
```
### `clipboard.read(data[, type])` _Experimental_
@ -112,6 +112,6 @@ console.log(clipboard.has('<p>selection</p>'));
* `type` String (可选)
```javascript
clipboard.write({text: 'test', html: "<b>test</b>"});
clipboard.write({text: 'test', html: '<b>test</b>'})
```
向 clipboard 写入 `data` .

View file

@ -3,22 +3,22 @@
`content-tracing` 模块是用来收集由底层的Chromium content 模块 产生的搜索数据. 这个模块不具备web接口所有需要我们在chrome浏览器中添加 `chrome://tracing/` 来加载生成文件从而查看结果.
```javascript
const contentTracing = require('electron').contentTracing;
const contentTracing = require('electron').contentTracing
const options = {
categoryFilter: '*',
traceOptions: 'record-until-full,enable-sampling'
}
contentTracing.startRecording(options, function() {
console.log('Tracing started');
contentTracing.startRecording(options, function () {
console.log('Tracing started')
setTimeout(function() {
contentTracing.stopRecording('', function(path) {
console.log('Tracing data recorded to ' + path);
});
}, 5000);
});
setTimeout(function () {
contentTracing.stopRecording('', function (path) {
console.log('Tracing data recorded to ' + path)
})
}, 5000)
})
```
## 方法

View file

@ -5,14 +5,14 @@
下面是一个自动提交崩溃报告给服务器的例子 :
```javascript
const crashReporter = require('electron').crashReporter;
const crashReporter = require('electron').crashReporter
crashReporter.start({
productName: 'YourName',
companyName: 'YourCompany',
submitURL: 'https://your-domain.com/url-to-submit',
autoSubmit: true
});
})
```
可以使用下面的项目来创建一个服务器,用来接收和处理崩溃报告 :

View file

@ -4,12 +4,12 @@
```javascript
// 在渲染进程中.
var desktopCapturer = require('electron').desktopCapturer;
var desktopCapturer = require('electron').desktopCapturer
desktopCapturer.getSources({types: ['window', 'screen']}, function(error, sources) {
if (error) throw error;
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") {
if (sources[i].name == 'Electron') {
navigator.webkitGetUserMedia({
audio: false,
video: {
@ -22,18 +22,18 @@ desktopCapturer.getSources({types: ['window', 'screen']}, function(error, source
maxHeight: 720
}
}
}, gotStream, getUserMediaError);
return;
}, gotStream, getUserMediaError)
return
}
}
});
})
function gotStream(stream) {
document.querySelector('video').src = URL.createObjectURL(stream);
function gotStream (stream) {
document.querySelector('video').src = URL.createObjectURL(stream)
}
function getUserMediaError(e) {
console.log('getUserMediaError');
function getUserMediaError (e) {
console.log('getUserMediaError')
}
```

View file

@ -10,8 +10,8 @@
```javascript
const BrowserWindow = require('electron').BrowserWindow;
var win = new BrowserWindow({ width: 800, height: 600, frame: false });
const BrowserWindow = require('electron').BrowserWindow
var win = new BrowserWindow({ width: 800, height: 600, frame: false })
```
### macOS上的替代方案
@ -21,7 +21,7 @@ var win = new BrowserWindow({ width: 800, height: 600, frame: false });
,同时又想保持对窗口的控制("traffic lights")。你可以通过指定`titleBarStyle`这一新选项达到目标:
```javascript
var win = new BrowserWindow({ 'titleBarStyle': 'hidden' });
var win = new BrowserWindow({ 'titleBarStyle': 'hidden' })
```
## 透明窗口
@ -29,7 +29,7 @@ var win = new BrowserWindow({ 'titleBarStyle': 'hidden' });
通过设置`transparent` 选项为 `true`,你能使无边框窗口透明:
```javascript
var win = new BrowserWindow({ transparent: true, frame: false });
var win = new BrowserWindow({ transparent: true, frame: false })
```
### 限制

View file

@ -6,30 +6,30 @@
消息前使用此模块(注册快捷键).
```javascript
var app = require('app');
var globalShortcut = require('global-shortcut');
var app = require('app')
var globalShortcut = require('global-shortcut')
app.on('ready', function() {
app.on('ready', function () {
// Register a 'ctrl+x' shortcut listener.
var ret = globalShortcut.register('ctrl+x', function() {
console.log('ctrl+x is pressed');
var ret = globalShortcut.register('ctrl+x', function () {
console.log('ctrl+x is pressed')
})
if (!ret) {
console.log('registration failed');
console.log('registration failed')
}
// Check whether a shortcut is registered.
console.log(globalShortcut.isRegistered('ctrl+x'));
});
console.log(globalShortcut.isRegistered('ctrl+x'))
})
app.on('will-quit', function() {
app.on('will-quit', function () {
// Unregister a shortcut.
globalShortcut.unregister('ctrl+x');
globalShortcut.unregister('ctrl+x')
// Unregister all shortcuts.
globalShortcut.unregisterAll();
});
globalShortcut.unregisterAll()
})
```
## Methods

View file

@ -14,27 +14,27 @@
```javascript
// 在主进程中.
var ipc = require('ipc');
ipc.on('asynchronous-message', function(event, arg) {
console.log(arg); // 打印 "ping"
event.sender.send('asynchronous-reply', 'pong');
});
var ipc = require('ipc')
ipc.on('asynchronous-message', function (event, arg) {
console.log(arg) // 打印 "ping"
event.sender.send('asynchronous-reply', 'pong')
})
ipc.on('synchronous-message', function(event, arg) {
console.log(arg); // 打印 "ping"
event.returnValue = 'pong';
});
ipc.on('synchronous-message', function (event, arg) {
console.log(arg) // 打印 "ping"
event.returnValue = 'pong'
})
```
```javascript
// 在渲染进程(网页).
var ipc = require('ipc');
console.log(ipc.sendSync('synchronous-message', 'ping')); // 打印 "pong"
var ipc = require('ipc')
console.log(ipc.sendSync('synchronous-message', 'ping')) // 打印 "pong"
ipc.on('asynchronous-reply', function(arg) {
console.log(arg); // 打印 "pong"
});
ipc.send('asynchronous-message', 'ping');
ipc.on('asynchronous-reply', function (arg) {
console.log(arg) // 打印 "pong"
})
ipc.send('asynchronous-message', 'ping')
```
## 监听消息

View file

@ -16,27 +16,27 @@
```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');
});
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';
});
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"
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');
ipcRenderer.on('asynchronous-reply', function (event, arg) {
console.log(arg) // prints "pong"
})
ipcRenderer.send('asynchronous-message', 'ping')
```
## 监听消息

View file

@ -67,7 +67,7 @@ var template = [
label: 'Select All',
accelerator: 'CmdOrCtrl+A',
role: 'selectall'
},
}
]
},
{
@ -76,37 +76,37 @@ var template = [
{
label: 'Reload',
accelerator: 'CmdOrCtrl+R',
click: function(item, focusedWindow) {
click: function (item, focusedWindow) {
if (focusedWindow)
focusedWindow.reload();
focusedWindow.reload()
}
},
{
label: 'Toggle Full Screen',
accelerator: (function() {
accelerator: (function () {
if (process.platform == 'darwin')
return 'Ctrl+Command+F';
return 'Ctrl+Command+F'
else
return 'F11';
return 'F11'
})(),
click: function(item, focusedWindow) {
click: function (item, focusedWindow) {
if (focusedWindow)
focusedWindow.setFullScreen(!focusedWindow.isFullScreen());
focusedWindow.setFullScreen(!focusedWindow.isFullScreen())
}
},
{
label: 'Toggle Developer Tools',
accelerator: (function() {
accelerator: (function () {
if (process.platform == 'darwin')
return 'Alt+Command+I';
return 'Alt+Command+I'
else
return 'Ctrl+Shift+I';
return 'Ctrl+Shift+I'
})(),
click: function(item, focusedWindow) {
click: function (item, focusedWindow) {
if (focusedWindow)
focusedWindow.toggleDevTools();
focusedWindow.toggleDevTools()
}
},
}
]
},
{
@ -122,7 +122,7 @@ var template = [
label: 'Close',
accelerator: 'CmdOrCtrl+W',
role: 'close'
},
}
]
},
{
@ -131,14 +131,14 @@ var template = [
submenu: [
{
label: 'Learn More',
click: function() { require('electron').shell.openExternal('http://electron.atom.io') }
},
click: function () { require('electron').shell.openExternal('http://electron.atom.io') }
}
]
},
];
}
]
if (process.platform == 'darwin') {
var name = require('electron').remote.app.getName();
var name = require('electron').remote.app.getName()
template.unshift({
label: name,
submenu: [
@ -177,10 +177,10 @@ if (process.platform == 'darwin') {
{
label: 'Quit',
accelerator: 'Command+Q',
click: function() { app.quit(); }
},
click: function () { app.quit() }
}
]
});
})
// Window menu.
template[3].submenu.push(
{
@ -190,11 +190,11 @@ if (process.platform == 'darwin') {
label: 'Bring All to Front',
role: 'front'
}
);
)
}
var menu = Menu.buildFromTemplate(template);
Menu.setApplicationMenu(menu);
var menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)
```
## 类: Menu

View file

@ -5,15 +5,15 @@
例如, 当创建一个 tray 或设置窗口的图标时候,你可以使用一个字符串的图片路径 :
```javascript
var appIcon = new Tray('/Users/somebody/images/icon.png');
var window = new BrowserWindow({icon: '/Users/somebody/images/window.png'});
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);
var image = clipboard.readImage()
var appIcon = new Tray(image)
```
## 支持的格式
@ -39,7 +39,7 @@ images/
```javascript
var appIcon = new Tray('/Users/somebody/images/icon.png');
var appIcon = new Tray('/Users/somebody/images/icon.png')
```
也支持下面这些 DPI 后缀:
@ -102,9 +102,9 @@ var appIcon = new Tray('/Users/somebody/images/icon.png');
`nativeImage` 有如下方法:
```javascript
const nativeImage = require('electron').nativeImage;
const nativeImage = require('electron').nativeImage
var image = nativeImage.createFromPath('/Users/somebody/images/icon.png');
var image = nativeImage.createFromPath('/Users/somebody/images/icon.png')
```
### `image.toPNG()`

View file

@ -5,11 +5,11 @@
例如:
```javascript
app.on('ready', function() {
require('electron').powerMonitor.on('suspend', function() {
console.log('The system is going to sleep');
});
});
app.on('ready', function () {
require('electron').powerMonitor.on('suspend', function () {
console.log('The system is going to sleep')
})
})
```
## 事件

View file

@ -5,12 +5,12 @@
例如:
```javascript
const powerSaveBlocker = require('electron').powerSaveBlocker;
const powerSaveBlocker = require('electron').powerSaveBlocker
var id = powerSaveBlocker.start('prevent-display-sleep');
console.log(powerSaveBlocker.isStarted(id));
var id = powerSaveBlocker.start('prevent-display-sleep')
console.log(powerSaveBlocker.isStarted(id))
powerSaveBlocker.stop(id);
powerSaveBlocker.stop(id)
```
## 方法

View file

@ -19,12 +19,12 @@ Electron 中的 `process` 对象 与 upstream node 中的有以下的不同点:
```js
// preload.js
var _setImmediate = setImmediate;
var _clearImmediate = clearImmediate;
process.once('loaded', function() {
global.setImmediate = _setImmediate;
global.clearImmediate = _clearImmediate;
});
var _setImmediate = setImmediate
var _clearImmediate = clearImmediate
process.once('loaded', function () {
global.setImmediate = _setImmediate
global.clearImmediate = _clearImmediate
})
```
## 属性

View file

@ -5,20 +5,20 @@
例子,使用一个与 `file://` 功能相似的协议 :
```javascript
const electron = require('electron');
const app = electron.app;
const path = require('path');
const electron = require('electron')
const app = electron.app
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.normalize(__dirname + '/' + url)});
}, function (error) {
if (error)
console.error('Failed to register protocol')
});
});
app.on('ready', function () {
var protocol = electron.protocol
protocol.registerFileProtocol('atom', function (request, callback) {
var url = request.url.substr(7)
callback({path: path.normalize(__dirname + '/' + url)})
}, function (error) {
if (error)
console.error('Failed to register protocol')
})
})
```
**注意:** 这个模块只有在 `app` 模块的 `ready` 事件触发之后才可使用.
@ -82,12 +82,12 @@ app.on('ready', function() {
例子:
```javascript
protocol.registerBufferProtocol('atom', function(request, callback) {
callback({mimeType: 'text/html', data: new Buffer('<h5>Response</h5>')});
protocol.registerBufferProtocol('atom', function (request, callback) {
callback({mimeType: 'text/html', data: new Buffer('<h5>Response</h5>')})
}, function (error) {
if (error)
console.error('Failed to register protocol')
});
})
```
### `protocol.registerStringProtocol(scheme, handler[, completion])`

View file

@ -8,11 +8,11 @@ Electron中, 与GUI相关的模块如 `dialog`, `menu` 等)只存在于主进
下面是从渲染进程创建一个浏览器窗口的例子:
```javascript
const remote = require('electron').remote;
const BrowserWindow = remote.BrowserWindow;
const remote = require('electron').remote
const BrowserWindow = remote.BrowserWindow
var win = new BrowserWindow({ width: 800, height: 600 });
win.loadURL('https://github.com');
var win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL('https://github.com')
```
**注意:** 反向操作(从主进程访问渲染进程),可以使用[webContents.executeJavascript](web-contents.md#webcontentsexecutejavascriptcode-usergesture).
@ -55,23 +55,23 @@ get the return value of the passed callbacks.
```javascript
// 主进程 mapNumbers.js
exports.withRendererCallback = function(mapper) {
return [1,2,3].map(mapper);
exports.withRendererCallback = function (mapper) {
return [1, 2, 3].map(mapper)
}
exports.withLocalCallback = function() {
return exports.mapNumbers(function(x) {
return x + 1;
});
exports.withLocalCallback = function () {
return exports.mapNumbers(function (x) {
return x + 1
})
}
```
```javascript
// 渲染进程
var mapNumbers = require("remote").require("./mapNumbers");
var mapNumbers = require('remote').require('./mapNumbers')
var withRendererCb = mapNumbers.withRendererCallback(function(x) {
return x + 1;
var withRendererCb = mapNumbers.withRendererCallback(function (x) {
return x + 1
})
var withLocalCb = mapNumbers.withLocalCallback()
@ -86,9 +86,9 @@ console.log(withRendererCb, withLocalCb) // [true, true, true], [2, 3, 4]
例如,下面的代码第一眼看上去毫无问题。给远程对象的`close`事件绑定了一个回调函数:
```javascript
remote.getCurrentWindow().on('close', function() {
remote.getCurrentWindow().on('close', function () {
// blabla...
});
})
```
但记住主进程会一直保持对这个回调函数的引用,除非明确的卸载它。如果不卸载,每次重新载入窗口都会再次绑定,这样每次重启就会泄露一个回调函数。
@ -102,7 +102,7 @@ remote.getCurrentWindow().on('close', function() {
在主进程中的内置模块已经被添加为`remote`模块中的属性,所以可以直接像使用`electron`模块一样直接使用它们。
```javascript
const app = remote.app;
const app = remote.app
```
## 方法

View file

@ -10,36 +10,36 @@
一个例子,创建一个充满整个屏幕的窗口 :
```javascript
const electron = require('electron');
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
const electron = require('electron')
const app = electron.app
const BrowserWindow = electron.BrowserWindow
var mainWindow;
var mainWindow
app.on('ready', function() {
var electronScreen = electron.screen;
var size = electronScreen.getPrimaryDisplay().workAreaSize;
mainWindow = new BrowserWindow({ width: size.width, height: size.height });
});
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;
const electron = require('electron')
const app = electron.app
const BrowserWindow = electron.BrowserWindow
var mainWindow;
var mainWindow
app.on('ready', function() {
var electronScreen = electron.screen;
var displays = electronScreen.getAllDisplays();
var externalDisplay = null;
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;
externalDisplay = displays[i]
break
}
}
@ -47,9 +47,9 @@ app.on('ready', function() {
mainWindow = new BrowserWindow({
x: externalDisplay.bounds.x + 50,
y: externalDisplay.bounds.y + 50
});
})
}
});
})
```
## `Display` 对象

View file

@ -5,12 +5,12 @@
你也可以通过使用 [`webContents`](web-contents.md) 的属性 `session` 来使用一个已有页面的 `session` `webContents` 是[`BrowserWindow`](browser-window.md) 的属性.
```javascript
const BrowserWindow = require('electron').BrowserWindow;
const BrowserWindow = require('electron').BrowserWindow
var win = new BrowserWindow({ width: 800, height: 600 });
win.loadURL("http://github.com");
var win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL('http://github.com')
var ses = win.webContents.session;
var ses = win.webContents.session
```
## 方法
@ -38,9 +38,9 @@ var ses = win.webContents.session;
可以在 `session` 模块中创建一个 `Session` 对象 :
```javascript
const session = require('electron').session;
const session = require('electron').session
var ses = session.fromPartition('persist:name');
var ses = session.fromPartition('persist:name')
```
### 实例事件
@ -58,12 +58,12 @@ var ses = session.fromPartition('persist:name');
调用 `event.preventDefault()` 可以取消下载,并且在进程的下个 tick中这个 `item` 也不可用.
```javascript
session.defaultSession.on('will-download', function(event, item, webContents) {
event.preventDefault();
require('request')(item.getURL(), function(data) {
require('fs').writeFileSync('/somewhere', data);
});
});
session.defaultSession.on('will-download', function (event, item, webContents) {
event.preventDefault()
require('request')(item.getURL(), function (data) {
require('fs').writeFileSync('/somewhere', data)
})
})
```
### 实例方法
@ -76,22 +76,22 @@ session.defaultSession.on('will-download', function(event, item, webContents) {
```javascript
// 查询所有 cookies.
session.defaultSession.cookies.get({}, function(error, cookies) {
console.log(cookies);
});
session.defaultSession.cookies.get({}, function (error, cookies) {
console.log(cookies)
})
// 查询与指定 url 相关的所有 cookies.
session.defaultSession.cookies.get({ url : "http://www.github.com" }, function(error, cookies) {
console.log(cookies);
});
session.defaultSession.cookies.get({ url: 'http://www.github.com' }, function (error, cookies) {
console.log(cookies)
})
// 设置 cookie;
// 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) {
var cookie = { url: 'http://www.github.com', name: 'dummy_name', value: 'dummy' }
session.defaultSession.cookies.set(cookie, function (error) {
if (error)
console.error(error);
});
console.error(error)
})
```
#### `ses.cookies.get(filter, callback)`
@ -238,13 +238,13 @@ proxyURL = [<proxyScheme>"://"]<proxyHost>[":"<proxyPort>]
```javascript
// 模拟 GPRS 连接,使用的 50kbps 流量500 毫秒的 rtt.
window.webContents.session.enableNetworkEmulation({
latency: 500,
downloadThroughput: 6400,
uploadThroughput: 6400
});
latency: 500,
downloadThroughput: 6400,
uploadThroughput: 6400
})
// 模拟网络故障.
window.webContents.session.enableNetworkEmulation({offline: true});
window.webContents.session.enableNetworkEmulation({offline: true})
```
#### `ses.disableNetworkEmulation()`
@ -261,12 +261,12 @@ window.webContents.session.enableNetworkEmulation({offline: true});
调用了 `setCertificateVerifyProc(null)` ,则将会回复到默认证书验证过程.
```javascript
myWindow.webContents.session.setCertificateVerifyProc(function(hostname, cert, callback) {
myWindow.webContents.session.setCertificateVerifyProc(function (hostname, cert, callback) {
if (hostname == 'github.com')
callback(true);
callback(true)
else
callback(false);
});
callback(false)
})
```
#### `ses.setPermissionRequestHandler(handler)`
@ -279,16 +279,16 @@ myWindow.webContents.session.setCertificateVerifyProc(function(hostname, cert, c
为对应 `session` 许可请求设置响应句柄.调用 `callback(true)` 接收许可,调用 `callback(false)` 禁止许可.
```javascript
session.fromPartition(partition).setPermissionRequestHandler(function(webContents, permission, callback) {
session.fromPartition(partition).setPermissionRequestHandler(function (webContents, permission, callback) {
if (webContents.getURL() === host) {
if (permission == "notifications") {
callback(false); // denied.
return;
if (permission == 'notifications') {
callback(false) // denied.
return
}
}
callback(true);
});
callback(true)
})
```
#### `ses.clearHostResolverCache([callback])`
@ -310,13 +310,13 @@ session.fromPartition(partition).setPermissionRequestHandler(function(webContent
```javascript
// 将所有请求的代理都修改为下列 url.
var filter = {
urls: ["https://*.github.com/*", "*://electron.github.io"]
};
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});
});
session.defaultSession.webRequest.onBeforeSendHeaders(filter, function (details, callback) {
details.requestHeaders['User-Agent'] = 'MyAgent'
callback({cancel: false, requestHeaders: details.requestHeaders})
})
```
#### `ses.webRequest.onBeforeRequest([filter, ]listener)`

View file

@ -6,9 +6,9 @@
在用户默认浏览器中打开URL的示例:
```javascript
const {shell} = require('electron');
const {shell} = require('electron')
shell.openExternal('https://github.com');
shell.openExternal('https://github.com')
```
## Methods

View file

@ -9,16 +9,16 @@ Electron也提供了一些额外的内置组件来开发传统桌面应用。一
主进程脚本看起来像个普通的nodejs脚本
```javascript
const electron = require('electron');
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
const electron = require('electron')
const app = electron.app
const BrowserWindow = electron.BrowserWindow
var window = null;
var window = null
app.on('ready', function() {
window = new BrowserWindow({width: 800, height: 600});
window.loadURL('https://github.com');
});
app.on('ready', function () {
window = new BrowserWindow({width: 800, height: 600})
window.loadURL('https://github.com')
})
```
渲染进程和传统的web界面一样除了它具有使用node模块的能力
@ -42,7 +42,7 @@ app.on('ready', function() {
如果你使用的是CoffeeScript或Babel你可以使用[destructuring assignment][4]来让使用内置模块更简单:
```javascript
const {app, BrowserWindow} = require('electron');
const {app, BrowserWindow} = require('electron')
```
然而如果你使用的是普通的JavaScript你就需要等到Chrome支持ES6了。

View file

@ -3,23 +3,23 @@
用一个 `Tray` 来表示一个图标,这个图标处于正在运行的系统的通知区 ,通常被添加到一个 context menu 上.
```javascript
const electron = require('electron');
const app = electron.app;
const Menu = electron.Menu;
const Tray = electron.Tray;
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 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);
});
])
appIcon.setToolTip('This is my application.')
appIcon.setContextMenu(contextMenu)
})
```
@ -32,8 +32,8 @@ __平台限制:__
* 在 Linux为了让单独的 `MenuItem` 起效,需要再次调用 `setContextMenu` .例如:
```javascript
contextMenu.items[2].checked = false;
appIcon.setContextMenu(contextMenu);
contextMenu.items[2].checked = false
appIcon.setContextMenu(contextMenu)
```
如果想在所有平台保持完全相同的行为,不应该依赖点击事件,而是一直将一个 context menu 添加到 tray icon.

View file

@ -6,12 +6,12 @@
它负责渲染并控制网页,也是 [`BrowserWindow`](browser-window.md) 对象的属性.一个使用 `webContents` 的例子:
```javascript
const BrowserWindow = require('electron').BrowserWindow;
const BrowserWindow = require('electron').BrowserWindow
var win = new BrowserWindow({width: 800, height: 1500});
win.loadURL("http://github.com");
var win = new BrowserWindow({width: 800, height: 1500})
win.loadURL('http://github.com')
var webContents = win.webContents;
var webContents = win.webContents
```
## 事件
@ -302,7 +302,7 @@ var webContents = win.webContents;
比如 `http://``file://`. 如果加载想要忽略 http 缓存,可以使用 `pragma` 头来达到目的.
```javascript
const options = {"extraHeaders" : "pragma: no-cache\n"}
const options = {'extraHeaders': 'pragma: no-cache\n'}
webContents.loadURL(url, options)
```
@ -317,10 +317,10 @@ webContents.loadURL(url, options)
返回当前page 的 url.
```javascript
var win = new BrowserWindow({width: 800, height: 600});
win.loadURL("http://github.com");
var win = new BrowserWindow({width: 800, height: 600})
win.loadURL('http://github.com')
var currentURL = win.webContents.getURL();
var currentURL = win.webContents.getURL()
```
### `webContents.getTitle()`
@ -507,12 +507,12 @@ var currentURL = win.webContents.getURL();
使用给定的 `action` 来为 `webContents` 停止任何 `findInPage` 请求.
```javascript
webContents.on('found-in-page', function(event, result) {
webContents.on('found-in-page', function (event, result) {
if (result.finalUpdate)
webContents.stopFindInPage("clearSelection");
});
webContents.stopFindInPage('clearSelection')
})
const requestId = webContents.findInPage("api");
const requestId = webContents.findInPage('api')
```
### `webContents.hasServiceWorker(callback)`
@ -566,23 +566,23 @@ const requestId = webContents.findInPage("api");
```
```javascript
const BrowserWindow = require('electron').BrowserWindow;
const fs = require('fs');
const BrowserWindow = require('electron').BrowserWindow
const fs = require('fs')
var win = new BrowserWindow({width: 800, height: 600});
win.loadURL("http://github.com");
var win = new BrowserWindow({width: 800, height: 600})
win.loadURL('http://github.com')
win.webContents.on("did-finish-load", function() {
win.webContents.on('did-finish-load', function () {
// Use default printing options
win.webContents.printToPDF({}, function(error, data) {
if (error) throw error;
fs.writeFile("/tmp/print.pdf", data, function(error) {
win.webContents.printToPDF({}, function (error, data) {
if (error) throw error
fs.writeFile('/tmp/print.pdf', data, function (error) {
if (error)
throw error;
console.log("Write PDF successfully.");
throw error
console.log('Write PDF successfully.')
})
})
});
})
```
### `webContents.addWorkSpace(path)`
@ -592,9 +592,9 @@ win.webContents.on("did-finish-load", function() {
添加指定的路径给开发者工具栏的 workspace.必须在 DevTools 创建之后使用它 :
```javascript
mainWindow.webContents.on('devtools-opened', function() {
mainWindow.webContents.addWorkSpace(__dirname);
});
mainWindow.webContents.on('devtools-opened', function () {
mainWindow.webContents.addWorkSpace(__dirname)
})
```
### `webContents.removeWorkSpace(path)`
@ -650,14 +650,14 @@ Toggles 开发者工具.
```javascript
// 主进程.
var window = null;
app.on('ready', function() {
window = new BrowserWindow({width: 800, height: 600});
window.loadURL('file://' + __dirname + '/index.html');
window.webContents.on('did-finish-load', function() {
window.webContents.send('ping', 'whoooooooh!');
});
});
var window = null
app.on('ready', function () {
window = new BrowserWindow({width: 800, height: 600})
window.loadURL('file://' + __dirname + '/index.html')
window.webContents.on('did-finish-load', function () {
window.webContents.send('ping', 'whoooooooh!')
})
})
```
```html
@ -769,14 +769,14 @@ app.on('ready', function() {
如果保存界面过程初始化成功,返回 true.
```javascript
win.loadURL('https://github.com');
win.loadURL('https://github.com')
win.webContents.on('did-finish-load', function() {
win.webContents.savePage('/tmp/test.html', 'HTMLComplete', function(error) {
win.webContents.on('did-finish-load', function () {
win.webContents.savePage('/tmp/test.html', 'HTMLComplete', function (error) {
if (!error)
console.log("Save page successfully");
});
});
console.log('Save page successfully')
})
})
```
## 实例属性
@ -803,23 +803,23 @@ win.webContents.on('did-finish-load', function() {
```javascript
try {
win.webContents.debugger.attach("1.1");
} catch(err) {
console.log("Debugger attach failed : ", err);
win.webContents.debugger.attach('1.1')
} catch (err) {
console.log('Debugger attach failed : ', err)
};
win.webContents.debugger.on('detach', function(event, reason) {
console.log("Debugger detached due to : ", reason);
});
win.webContents.debugger.on('detach', function (event, reason) {
console.log('Debugger detached due to : ', reason)
})
win.webContents.debugger.on('message', function(event, method, params) {
if (method == "Network.requestWillBeSent") {
if (params.request.url == "https://www.github.com")
win.webContents.debugger.detach();
win.webContents.debugger.on('message', function (event, method, params) {
if (method == 'Network.requestWillBeSent') {
if (params.request.url == 'https://www.github.com')
win.webContents.debugger.detach()
}
})
win.webContents.debugger.sendCommand("Network.enable");
win.webContents.debugger.sendCommand('Network.enable')
```
#### `webContents.debugger.attach([protocolVersion])`

View file

@ -5,9 +5,9 @@
例子,放大当前页到 200%.
```javascript
var webFrame = require('electron').webFrame;
var webFrame = require('electron').webFrame
webFrame.setZoomFactor(2);
webFrame.setZoomFactor(2)
```
## 方法
@ -54,11 +54,11 @@ webFrame.setZoomFactor(2);
例子,使用 [node-spellchecker][spellchecker] 作为一个 provider:
```javascript
webFrame.setSpellCheckProvider("en-US", true, {
spellCheck: function(text) {
return !(require('spellchecker').isMisspelled(text));
webFrame.setSpellCheckProvider('en-US', true, {
spellCheck: function (text) {
return !(require('spellchecker').isMisspelled(text))
}
});
})
```
### `webFrame.registerURLSchemeAsSecure(scheme)`

View file

@ -145,9 +145,9 @@
**例如**
```javascript
webview.addEventListener("dom-ready", function() {
webview.openDevTools();
});
webview.addEventListener('dom-ready', function () {
webview.openDevTools()
})
```
### `<webview>.loadURL(url[, options])`
@ -517,9 +517,9 @@ Returns:
下面示例代码将所有信息输出到内置控制台,没有考虑到输出等级和其他属性。
```javascript
webview.addEventListener('console-message', function(e) {
console.log('Guest page logged a message:', e.message);
});
webview.addEventListener('console-message', function (e) {
console.log('Guest page logged a message:', e.message)
})
```
### Event: 'found-in-page'
@ -536,12 +536,12 @@ webview.addEventListener('console-message', function(e) {
在请求[`webview.findInPage`](web-view-tag.md#webviewtagfindinpage)结果有效时触发.
```javascript
webview.addEventListener('found-in-page', function(e) {
webview.addEventListener('found-in-page', function (e) {
if (e.result.finalUpdate)
webview.stopFindInPage("keepSelection");
});
webview.stopFindInPage('keepSelection')
})
const rquestId = webview.findInPage("test");
const rquestId = webview.findInPage('test')
```
### Event: 'new-window'
@ -560,9 +560,9 @@ const rquestId = webview.findInPage("test");
下面示例代码在系统默认浏览器中打开了一个新的url.
```javascript
webview.addEventListener('new-window', function(e) {
require('electron').shell.openExternal(e.url);
});
webview.addEventListener('new-window', function (e) {
require('electron').shell.openExternal(e.url)
})
```
### Event: 'will-navigate'
@ -606,9 +606,9 @@ webview.addEventListener('new-window', function(e) {
下面的示例代码指示了在客户端试图关闭自己的时候将改变导航连接为`about:blank`.
```javascript
webview.addEventListener('close', function() {
webview.src = 'about:blank';
});
webview.addEventListener('close', function () {
webview.src = 'about:blank'
})
```
### Event: 'ipc-message'
@ -624,19 +624,19 @@ webview.addEventListener('close', function() {
```javascript
// In embedder page.
webview.addEventListener('ipc-message', function(event) {
console.log(event.channel);
webview.addEventListener('ipc-message', function (event) {
console.log(event.channel)
// Prints "pong"
});
webview.send('ping');
})
webview.send('ping')
```
```javascript
// In guest page.
var ipcRenderer = require('electron').ipcRenderer;
ipcRenderer.on('ping', function() {
ipcRenderer.sendToHost('pong');
});
var ipcRenderer = require('electron').ipcRenderer
ipcRenderer.on('ping', function () {
ipcRenderer.sendToHost('pong')
})
```
### Event: 'crashed'

View file

@ -25,17 +25,17 @@ Node.js 的新特性通常是由新版本的 V8 带来的。由于 Electron 使
// 在主进程中
global.sharedObject = {
someProperty: 'default value'
};
}
```
```javascript
// 在第一个页面中
require('remote').getGlobal('sharedObject').someProperty = 'new value';
require('remote').getGlobal('sharedObject').someProperty = 'new value'
```
```javascript
// 在第二个页面中
console.log(require('remote').getGlobal('sharedObject').someProperty);
console.log(require('remote').getGlobal('sharedObject').someProperty)
```
## 为什么应用的窗口、托盘在一段时间后不见了?
@ -52,17 +52,17 @@ console.log(require('remote').getGlobal('sharedObject').someProperty);
```javascript
app.on('ready', function() {
var tray = new Tray('/path/to/icon.png');
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');
var tray = null
app.on('ready', function () {
tray = new Tray('/path/to/icon.png')
})
```
@ -79,7 +79,7 @@ var mainWindow = new BrowserWindow({
webPreferences: {
nodeIntegration: false
}
});
})
```
假如你依然需要使用 Node.js 和 Electron 提供的 API你需要在引入那些库之前将这些变量重命名比如
@ -111,7 +111,7 @@ Uncaught TypeError: Cannot read property 'setZoomLevel' of undefined
你可以通过以下方式输出 `electron` 模块的路径来确认你是否使用了正确的模块。
```javascript
console.log(require.resolve('electron'));
console.log(require.resolve('electron'))
```
确认一下它是不是像下面这样的:

View file

@ -47,29 +47,29 @@ $ asar list /path/to/example.asar
`asar` 包读取一个文件:
```javascript
const fs = require('fs');
fs.readFileSync('/path/to/example.asar/file.txt');
const fs = require('fs')
fs.readFileSync('/path/to/example.asar/file.txt')
```
列出 `asar` 包中根目录下的所有文件:
```javascript
const fs = require('fs');
fs.readdirSync('/path/to/example.asar');
const fs = require('fs')
fs.readdirSync('/path/to/example.asar')
```
使用 `asar` 包中的一个模块:
```javascript
require('/path/to/example.asar/dir/module.js');
require('/path/to/example.asar/dir/module.js')
```
你也可以使用 `BrowserWindow` 来显示一个 `asar` 包里的 web 页面:
```javascript
const BrowserWindow = require('electron').BrowserWindow;
var win = new BrowserWindow({width: 800, height: 600});
win.loadURL('file:///path/to/example.asar/static/index.html');
const BrowserWindow = require('electron').BrowserWindow
var win = new BrowserWindow({width: 800, height: 600})
win.loadURL('file:///path/to/example.asar/static/index.html')
```
### Web API
@ -93,8 +93,8 @@ $.get('file:///path/to/example.asar/file.txt', function(data) {
你可以使用内置的 `original-fs` (提供和 `fs` 一样的 API模块来读取 `asar` 包的真实信息。
```javascript
var originalFs = require('original-fs');
originalFs.readFileSync('/path/to/example.asar');
var originalFs = require('original-fs')
originalFs.readFileSync('/path/to/example.asar')
```
## Node API 缺陷

View file

@ -14,7 +14,7 @@
```javascript
var myNotification = new Notification('Title', {
body: 'Lorem Ipsum Dolor Sit Amet'
});
})
myNotification.onclick = function () {
console.log('Notification clicked')
@ -56,12 +56,12 @@ Windows 和 macOS 提供获取最近文档列表的便捷方式,那就是打
为了增加一个文件到最近文件列表,你可以使用 [app.addRecentDocument][3] API:
```javascript
var app = require('app');
app.addRecentDocument('/Users/USERNAME/Desktop/work.type');
var app = require('app')
app.addRecentDocument('/Users/USERNAME/Desktop/work.type')
```
或者你也可以使用 [app.clearRecentDocuments][4] API 来清空最近文件列表。
```javascript
app.clearRecentDocuments();
app.clearRecentDocuments()
```
## Windows 需注意
为了这个特性在 Windows 上表现正常,你的应用需要被注册成为一种文件类型的句柄,否则,在你注册之前,文件不会出现在跳转列表。你可以在 [Application Registration][5] 里找到任何关于注册事宜的说明。
@ -76,17 +76,17 @@ macOS 可以让开发者定制自己的菜单,通常会包含一些常用特
使用 `app.dock.setMenu` API 来设置你的菜单,这仅在 macOS 上可行:
```javascript
var app = require('app');
var Menu = require('menu');
var app = require('app')
var Menu = require('menu')
var dockMenu = Menu.buildFromTemplate([
{ label: 'New Window', click: function() { console.log('New Window'); } },
{ 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);
])
app.dock.setMenu(dockMenu)
```
## 用户任务(Windows)
@ -102,7 +102,7 @@ app.dock.setMenu(dockMenu);
你可以使用 [app.setUserTasks][8] API 来设置你的应用中的用户任务:
```javascript
var app = require('app');
var app = require('app')
app.setUserTasks([
{
program: process.execPath,
@ -112,11 +112,11 @@ app.setUserTasks([
title: 'New Window',
description: 'Create a new window'
}
]);
])
```
调用 `app.setUserTasks` 并传入空数组就可以清除你的任务列表:
```javascript
app.setUserTasks([]);
app.setUserTasks([])
```
当你的应用关闭时,用户任务会仍然会出现,在你的应用被卸载前,任务指定的图标和程序的路径必须是存在的。
@ -132,29 +132,29 @@ app.setUserTasks([]);
![Thumbnail toolbar of Windows Media Player][9]
你可以使用 [BrowserWindow.setThumbarButtons][10] 来设置你的应用的缩略图工具栏。
```javascript
var BrowserWindow = require('browser-window');
var path = require('path');
var BrowserWindow = require('browser-window')
var path = require('path')
var win = new BrowserWindow({
width: 800,
height: 600
});
})
win.setThumbarButtons([
{
tooltip: "button1",
tooltip: 'button1',
icon: path.join(__dirname, 'button1.png'),
click: function() { console.log("button2 clicked"); }
click: function () { console.log('button2 clicked') }
},
{
tooltip: "button2",
tooltip: 'button2',
icon: path.join(__dirname, 'button2.png'),
flags:['enabled', 'dismissonclick'],
click: function() { console.log("button2 clicked."); }
flags: ['enabled', 'dismissonclick'],
click: function () { console.log('button2 clicked.') }
}
]);
])
```
调用 `BrowserWindow.setThumbarButtons` 并传入空数组即可清空缩略图工具栏:
```javascript
win.setThumbarButtons([]);
win.setThumbarButtons([])
```
## Unity launcher 快捷方式(Linux)

View file

@ -18,14 +18,14 @@ $ git clone --recursive https://github.com/facebook/react-devtools.git
然后你就可以在任意页面的 DevTools 里加载 React DevTools 了,通过控制台输入如下命令加载扩展:
```javascript
const BrowserWindow = require('electron').remote.BrowserWindow;
BrowserWindow.addDevToolsExtension('/some-directory/react-devtools/shells/chrome');
const BrowserWindow = require('electron').remote.BrowserWindow
BrowserWindow.addDevToolsExtension('/some-directory/react-devtools/shells/chrome')
```
要卸载扩展,可以调用 `BrowserWindow.removeDevToolsExtension` API (扩展名作为参数传入)该扩展在下次打开DevTools时就不会加载了
```javascript
BrowserWindow.removeDevToolsExtension('React Developer Tools');
BrowserWindow.removeDevToolsExtension('React Developer Tools')
```
## DevTools 扩展的格式

View file

@ -3,15 +3,15 @@
*main.js*
```javascript
const electron = require('electron');
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
const electron = require('electron')
const app = electron.app
const BrowserWindow = electron.BrowserWindow
var onlineStatusWindow;
app.on('ready', function() {
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false });
onlineStatusWindow.loadURL('file://' + __dirname + '/online-status.html');
});
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*
@ -37,20 +37,20 @@ app.on('ready', function() {
*main.js*
```javascript
const electron = require('electron');
const app = electron.app;
const ipcMain = electron.ipcMain;
const BrowserWindow = electron.BrowserWindow;
const electron = require('electron')
const app = electron.app
const ipcMain = electron.ipcMain
const BrowserWindow = electron.BrowserWindow
var onlineStatusWindow;
app.on('ready', function() {
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false });
onlineStatusWindow.loadURL('file://' + __dirname + '/online-status.html');
});
var onlineStatusWindow
app.on('ready', function () {
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false })
onlineStatusWindow.loadURL('file://' + __dirname + '/online-status.html')
})
ipcMain.on('online-status-changed', function(event, status) {
console.log(status);
});
ipcMain.on('online-status-changed', function (event, status) {
console.log(status)
})
```
*online-status.html*

View file

@ -41,56 +41,56 @@ your-app/
`main.js` 应该用于创建窗口和处理系统事件,一个典型的例子如下:
```javascript
const electron = require('electron');
const electron = require('electron')
// 控制应用生命周期的模块。
const {app} = electron;
const {app} = electron
// 创建原生浏览器窗口的模块。
const {BrowserWindow} = electron;
const {BrowserWindow} = electron
// 保持一个对于 window 对象的全局引用,如果你不这样做,
// 当 JavaScript 对象被垃圾回收, window 会被自动地关闭
let mainWindow;
let mainWindow
function createWindow() {
function createWindow () {
// 创建浏览器窗口。
mainWindow = new BrowserWindow({width: 800, height: 600});
mainWindow = new BrowserWindow({width: 800, height: 600})
// 加载应用的 index.html。
mainWindow.loadURL(`file://${__dirname}/index.html`);
mainWindow.loadURL(`file://${__dirname}/index.html`)
// 启用开发工具。
mainWindow.webContents.openDevTools();
mainWindow.webContents.openDevTools()
// 当 window 被关闭,这个事件会被触发。
mainWindow.on('closed', () => {
// 取消引用 window 对象,如果你的应用支持多窗口的话,
// 通常会把多个 window 对象存放在一个数组里面,
// 与此同时,你应该删除相应的元素。
mainWindow = null;
});
mainWindow = null
})
}
// Electron 会在初始化后并准备
// 创建浏览器窗口时,调用这个函数。
// 部分 API 在 ready 事件触发后才能使用。
app.on('ready', createWindow);
app.on('ready', createWindow)
// 当全部窗口关闭时退出。
app.on('window-all-closed', () => {
// 在 macOS 上,除非用户用 Cmd + Q 确定地退出,
// 否则绝大部分应用及其菜单栏会保持激活。
if (process.platform !== 'darwin') {
app.quit();
app.quit()
}
});
})
app.on('activate', () => {
// 在 macOS 上,当点击 dock 图标并且该应用没有打开的窗口时,
// 绝大部分应用会重新创建一个窗口。
if (mainWindow === null) {
createWindow();
createWindow()
}
});
})
// 在这文件,你可以续写应用剩下主进程代码。
// 也可以拆分成几个文件,然后用 require 导入。

View file

@ -21,22 +21,22 @@ Flash 的插件信息。插件的路径和版本会对 Election 对其的支持
// 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');
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.commandLine.appendSwitch('ppapi-flash-version', '17.0.0.169')
app.on('ready', function() {
app.on('ready', function () {
mainWindow = new BrowserWindow({
'width': 800,
'height': 600,
'web-preferences': {
'plugins': true
}
});
mainWindow.loadURL('file://' + __dirname + '/index.html');
})
mainWindow.loadURL('file://' + __dirname + '/index.html')
// Something else
});
})
```
## 使用 `<webview>` 标签启用插件

View file

@ -33,7 +33,7 @@ $ npm install selenium-webdriver
在 Electron 下使用 `selenium-webdriver` 和其平时的用法并没有大的差异,只是你需要手动设置连接 ChromeDriver以及 Electron 的路径:
```javascript
const webdriver = require('selenium-webdriver');
const webdriver = require('selenium-webdriver')
var driver = new webdriver.Builder()
// "9515" 是ChromeDriver使用的端口
@ -41,22 +41,22 @@ var driver = new webdriver.Builder()
.withCapabilities({
chromeOptions: {
// 这里设置Electron的路径
binary: '/Path-to-Your-App.app/Contents/MacOS/Atom',
binary: '/Path-to-Your-App.app/Contents/MacOS/Atom'
}
})
.forBrowser('electron')
.build();
.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.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();
driver.quit()
```
## 通过 WebdriverIO 配置
@ -84,30 +84,30 @@ $ npm install webdriverio
### 3. 连接到 ChromeDriver
```javascript
const webdriverio = require('webdriverio');
const webdriverio = require('webdriverio')
var options = {
host: "localhost", // 使用localhost作为ChromeDriver服务器
port: 9515, // "9515"是ChromeDriver使用的端口
desiredCapabilities: {
browserName: 'chrome',
chromeOptions: {
binary: '/Path-to-Your-App/electron', // Electron的路径
args: [/* cli arguments */] // 可选参数,类似:'app=' + /path/to/your/app/
}
host: 'localhost', // 使用localhost作为ChromeDriver服务器
port: 9515, // "9515"是ChromeDriver使用的端口
desiredCapabilities: {
browserName: 'chrome',
chromeOptions: {
binary: '/Path-to-Your-App/electron', // Electron的路径
args: [/* cli arguments */] // 可选参数,类似:'app=' + /path/to/your/app/
}
};
}
}
var client = webdriverio.remote(options);
var client = webdriverio.remote(options)
client
.init()
.url('http://google.com')
.setValue('#q', 'webdriverio')
.click('#btnG')
.getTitle().then(function(title) {
console.log('Title was: ' + title);
.getTitle().then(function (title) {
console.log('Title was: ' + title)
})
.end();
.end()
```
## 工作流程

View file

@ -41,19 +41,19 @@ __注意:__ 虽然只有 `widevinecdmadapter` 的二进制文件传递给了 El
// * `widevinecdmadapter.plugin` on macOS,
// * `libwidevinecdmadapter.so` on Linux,
// * `widevinecdmadapter.dll` on Windows.
app.commandLine.appendSwitch('widevine-cdm-path', '/path/to/widevinecdmadapter.plugin');
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');
app.commandLine.appendSwitch('widevine-cdm-version', '1.4.8.866')
var mainWindow = null;
app.on('ready', function() {
var mainWindow = null
app.on('ready', function () {
mainWindow = new BrowserWindow({
webPreferences: {
// The `plugins` have to be enabled.
plugins: true
}
})
});
})
```
## 验证插件

View file

@ -15,27 +15,27 @@
```javascript
// 在主行程裡
var ipc = require('ipc');
ipc.on('asynchronous-message', function(event, arg) {
console.log(arg); // 輸出 "ping"
event.sender.send('asynchronous-reply', 'pong');
});
var ipc = require('ipc')
ipc.on('asynchronous-message', function (event, arg) {
console.log(arg) // 輸出 "ping"
event.sender.send('asynchronous-reply', 'pong')
})
ipc.on('synchronous-message', function(event, arg) {
console.log(arg); // 輸出 "ping"
event.returnValue = 'pong';
});
ipc.on('synchronous-message', function (event, arg) {
console.log(arg) // 輸出 "ping"
event.returnValue = 'pong'
})
```
```javascript
// 在渲染行程裡 (網頁).
var ipc = require('ipc');
console.log(ipc.sendSync('synchronous-message', 'ping')); // 輸出 "pong"
var ipc = require('ipc')
console.log(ipc.sendSync('synchronous-message', 'ping')) // 輸出 "pong"
ipc.on('asynchronous-reply', function(arg) {
console.log(arg); // 輸出 "pong"
});
ipc.send('asynchronous-message', 'ping');
ipc.on('asynchronous-reply', function (arg) {
console.log(arg) // 輸出 "pong"
})
ipc.send('asynchronous-message', 'ping')
```
## 聆聽訊息

View file

@ -6,13 +6,13 @@
舉例來說:
```javascript
var app = require('app');
var app = require('app')
app.on('ready', function() {
require('power-monitor').on('suspend', function() {
console.log('The system is going to sleep');
});
});
app.on('ready', function () {
require('power-monitor').on('suspend', function () {
console.log('The system is going to sleep')
})
})
```
## 事件 (Events)

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