Merge pull request #7471 from electron/update-standard-markdown
Use standard style JavaScript in all docs translations
This commit is contained in:
commit
27e1938e9f
122 changed files with 1472 additions and 1468 deletions
|
@ -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`
|
||||
|
|
|
@ -19,14 +19,14 @@ está comenzando a cargar la página web o el script principal.
|
|||
Puede ser usado por el script precargado para añadir de nuevo los símbolos globales
|
||||
de Node eliminados, al alcance global cuando la integración de Node está apagada:
|
||||
|
||||
```js
|
||||
```javascript
|
||||
// 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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
})
|
||||
```
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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,19 @@ __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 with Settings', submenu: [
|
||||
{ label: 'Basic' },
|
||||
{ label: 'Pro'}
|
||||
]},
|
||||
{ label: 'New Command...'}
|
||||
]);
|
||||
app.dock.setMenu(dockMenu);
|
||||
{label: 'New Window', click: function () { console.log('New Window') }},
|
||||
{label: 'New Window with Settings',
|
||||
submenu: [
|
||||
{label: 'Basic'},
|
||||
{label: 'Pro'}
|
||||
]
|
||||
},
|
||||
{label: 'New Command...'}
|
||||
])
|
||||
app.dock.setMenu(dockMenu)
|
||||
```
|
||||
|
||||
## Tareas de usuario (Windows)
|
||||
|
@ -107,7 +109,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 +119,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
|
||||
|
@ -157,8 +159,8 @@ Para establecer la barra de progreso de una ventana, puedes utilizar
|
|||
[BrowserWindow.setProgressBar][setprogressbar] API:
|
||||
|
||||
```javascript
|
||||
var window = new BrowserWindow({...});
|
||||
window.setProgressBar(0.5);
|
||||
var window = new BrowserWindow()
|
||||
window.setProgressBar(0.5)
|
||||
```
|
||||
|
||||
[addrecentdocument]: ../api/app.md#appaddrecentdocumentpath
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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_
|
||||
|
|
|
@ -54,7 +54,7 @@ El formato de `package.json` es exactamente el mismo que cualquier módulo Node,
|
|||
y el script especificado en el campo `main` será el script de arranque de tu aplicación,
|
||||
a ser ejecutado por el proceso principal. Un ejemplo de `package.json` podría verse así:
|
||||
|
||||
```json
|
||||
```javascripton
|
||||
{
|
||||
"name" : "your-app",
|
||||
"version" : "0.1.0",
|
||||
|
@ -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();
|
||||
if (process.platform !== 'darwin') {
|
||||
app.quit()
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
// Este método será llamado cuando Electron haya finalizado la inicialización
|
||||
// y esté listo para crear ventanas de navegador.
|
||||
app.on('ready', function() {
|
||||
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:
|
||||
|
|
|
@ -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() {
|
||||
if (process.platform != 'darwin') {
|
||||
app.quit();
|
||||
app.on('window-all-closed', function () {
|
||||
if (process.platform !== 'darwin') {
|
||||
app.quit()
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
// Specify flash path.
|
||||
// On Windows, it might be /path/to/pepflashplayer.dll
|
||||
// On macOS, /path/to/PepperFlashPlayer.plugin
|
||||
// On Linux, /path/to/libpepflashplayer.so
|
||||
app.commandLine.appendSwitch('ppapi-flash-path', '/path/to/libpepflashplayer.so');
|
||||
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>`
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 :
|
||||
|
|
|
@ -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)
|
||||
})
|
||||
```
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>.
|
||||
|
|
|
@ -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')
|
||||
})
|
||||
```
|
||||
|
||||
|
@ -325,26 +325,25 @@ macOSは、ユーザーがFinderで2つ目のアプリインスタンスを開
|
|||
|
||||
2つ目のインスタンスを起動するとき、メインのインスタンスのウィンドウをアクティブにする例
|
||||
|
||||
```js
|
||||
var myWindow = null;
|
||||
```javascript
|
||||
var myWindow = null
|
||||
|
||||
var shouldQuit = app.makeSingleInstance(function(commandLine, workingDirectory) {
|
||||
var shouldQuit = app.makeSingleInstance(function (commandLine, workingDirectory) {
|
||||
// Someone tried to run a second instance, we should focus our window
|
||||
if (myWindow) {
|
||||
if (myWindow.isMinimized()) myWindow.restore();
|
||||
myWindow.focus();
|
||||
if (myWindow.isMinimized()) myWindow.restore()
|
||||
myWindow.focus()
|
||||
}
|
||||
return true;
|
||||
});
|
||||
return true
|
||||
})
|
||||
|
||||
if (shouldQuit) {
|
||||
app.quit();
|
||||
return;
|
||||
app.quit()
|
||||
}
|
||||
|
||||
// Create myWindow, load the rest of the app, etc...
|
||||
app.on('ready', function() {
|
||||
});
|
||||
app.on('ready', function () {
|
||||
// Create myWindow, load the rest of the app, etc...
|
||||
})
|
||||
```
|
||||
|
||||
### `app.setAppUserModelId(id)` _Windows_
|
||||
|
@ -359,24 +358,24 @@ app.on('ready', function() {
|
|||
|
||||
使用例:
|
||||
|
||||
```js
|
||||
let browserOptions = {width: 1000, height: 800};
|
||||
```javascript
|
||||
let browserOptions = {width: 1000, height: 800}
|
||||
|
||||
// Make the window transparent only if the platform supports it.
|
||||
if (process.platform !== 'win32' || app.isAeroGlassEnabled()) {
|
||||
browserOptions.transparent = true;
|
||||
browserOptions.frame = false;
|
||||
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`)
|
||||
}
|
||||
```
|
||||
|
||||
|
|
|
@ -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
|
||||
});
|
||||
})
|
||||
```
|
||||
|
||||
|
||||
|
|
|
@ -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`を書き込みます。
|
||||
|
|
|
@ -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)
|
||||
})
|
||||
```
|
||||
|
||||
## メソッド
|
||||
|
|
|
@ -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
|
||||
});
|
||||
})
|
||||
```
|
||||
|
||||
## メソッド
|
||||
|
|
|
@ -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')
|
||||
}
|
||||
```
|
||||
|
||||
|
|
|
@ -5,9 +5,8 @@
|
|||
複数のファイルやディレクトリを選択するためのダイアログを表示する例です:
|
||||
|
||||
```javascript
|
||||
var win = ...; // BrowserWindow in which to show the dialog
|
||||
const dialog = require('electron').dialog;
|
||||
console.log(dialog.showOpenDialog({ properties: [ 'openFile', 'openDirectory', 'multiSelections' ]}));
|
||||
const {dialog} = require('electron')
|
||||
console.log(dialog.showOpenDialog({properties: ['openFile', 'openDirectory', 'multiSelections']}))
|
||||
```
|
||||
|
||||
**Note for macOS**: シートとしてダイアログを表示したい場合、唯一しなければならないことは、`browserWindow`パラメーターを参照する`BrowserWindow`を提供することです。
|
||||
|
|
|
@ -4,22 +4,31 @@
|
|||
|
||||
```javascript
|
||||
// In the main process.
|
||||
win.webContents.session.on('will-download', function(event, item, webContents) {
|
||||
const {BrowserWindow} = require('electron')
|
||||
let win = new BrowserWindow()
|
||||
win.webContents.session.on('will-download', (event, item, webContents) => {
|
||||
// Set the save path, making Electron not to prompt a save dialog.
|
||||
item.setSavePath('/tmp/save.pdf');
|
||||
console.log(item.getMimeType());
|
||||
console.log(item.getFilename());
|
||||
console.log(item.getTotalBytes());
|
||||
item.on('updated', function() {
|
||||
console.log('Received bytes: ' + item.getReceivedBytes());
|
||||
});
|
||||
item.on('done', function(e, state) {
|
||||
if (state == "completed") {
|
||||
console.log("Download successfully");
|
||||
} else {
|
||||
console.log("Download is cancelled or interrupted that can't be resumed");
|
||||
item.setSavePath('/tmp/save.pdf')
|
||||
|
||||
item.on('updated', (event, state) => {
|
||||
if (state === 'interrupted') {
|
||||
console.log('Download is interrupted but can be resumed')
|
||||
} else if (state === 'progressing') {
|
||||
if (item.isPaused()) {
|
||||
console.log('Download is paused')
|
||||
} else {
|
||||
console.log(`Received bytes: ${item.getReceivedBytes()}`)
|
||||
}
|
||||
}
|
||||
});
|
||||
})
|
||||
item.once('done', (event, state) => {
|
||||
if (state === 'completed') {
|
||||
console.log('Download successfully')
|
||||
} else {
|
||||
console.log(`Download failed: ${state}`)
|
||||
}
|
||||
})
|
||||
})
|
||||
```
|
||||
|
||||
## イベント
|
||||
|
|
|
@ -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 })
|
||||
```
|
||||
|
||||
### 制限
|
||||
|
|
|
@ -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()
|
||||
})
|
||||
```
|
||||
|
||||
## メソッド
|
||||
|
|
|
@ -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')
|
||||
```
|
||||
|
||||
## メッセージ受信
|
||||
|
|
|
@ -64,7 +64,7 @@ var template = [
|
|||
label: 'Select All',
|
||||
accelerator: 'CmdOrCtrl+A',
|
||||
role: 'selectall'
|
||||
},
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
|
@ -73,37 +73,38 @@ var template = [
|
|||
{
|
||||
label: 'Reload',
|
||||
accelerator: 'CmdOrCtrl+R',
|
||||
click: function(item, focusedWindow) {
|
||||
if (focusedWindow)
|
||||
focusedWindow.reload();
|
||||
click: function (item, focusedWindow) {
|
||||
if (focusedWindow) focusedWindow.reload()
|
||||
}
|
||||
},
|
||||
{
|
||||
label: 'Toggle Full Screen',
|
||||
accelerator: (function() {
|
||||
if (process.platform == 'darwin')
|
||||
return 'Ctrl+Command+F';
|
||||
else
|
||||
return 'F11';
|
||||
accelerator: (function () {
|
||||
if (process.platform === 'darwin') {
|
||||
return 'Ctrl+Command+F'
|
||||
} else {
|
||||
return 'F11'
|
||||
}
|
||||
})(),
|
||||
click: function(item, focusedWindow) {
|
||||
if (focusedWindow)
|
||||
focusedWindow.setFullScreen(!focusedWindow.isFullScreen());
|
||||
click: function (item, focusedWindow) {
|
||||
if (focusedWindow) {
|
||||
focusedWindow.setFullScreen(!focusedWindow.isFullScreen())
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
label: 'Toggle Developer Tools',
|
||||
accelerator: (function() {
|
||||
if (process.platform == 'darwin')
|
||||
return 'Alt+Command+I';
|
||||
else
|
||||
return 'Ctrl+Shift+I';
|
||||
accelerator: (function () {
|
||||
if (process.platform === 'darwin') {
|
||||
return 'Alt+Command+I'
|
||||
} else {
|
||||
return 'Ctrl+Shift+I'
|
||||
}
|
||||
})(),
|
||||
click: function(item, focusedWindow) {
|
||||
if (focusedWindow)
|
||||
focusedWindow.toggleDevTools();
|
||||
click: function (item, focusedWindow) {
|
||||
if (focusedWindow) focusedWindow.toggleDevTools()
|
||||
}
|
||||
},
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
|
@ -119,7 +120,7 @@ var template = [
|
|||
label: 'Close',
|
||||
accelerator: 'CmdOrCtrl+W',
|
||||
role: 'close'
|
||||
},
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
|
@ -128,14 +129,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();
|
||||
if (process.platform === 'darwin') {
|
||||
var name = require('electron').remote.app.getName()
|
||||
template.unshift({
|
||||
label: name,
|
||||
submenu: [
|
||||
|
@ -174,10 +175,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 +188,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
|
||||
|
|
|
@ -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()`
|
||||
|
|
|
@ -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')
|
||||
})
|
||||
})
|
||||
```
|
||||
|
||||
## イベント
|
||||
|
|
|
@ -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)
|
||||
```
|
||||
|
||||
## メソッド
|
||||
|
|
|
@ -12,14 +12,14 @@ Electronの`process`オブジェクトは次のようなAPIで拡張されてい
|
|||
|
||||
Node統合がオフになっているとき、削除したNodeグローバルシンボルをグローバルスコープへ戻すために、プリロードスクリプトで使用できます。
|
||||
|
||||
```js
|
||||
```javascript
|
||||
// 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
|
||||
})
|
||||
```
|
||||
|
||||
## プロパティ
|
||||
|
|
|
@ -5,20 +5,18 @@
|
|||
`file://`プロトコルの同様の効果をもつプロトコルを実装した例です。
|
||||
|
||||
```javascript
|
||||
const electron = require('electron');
|
||||
const app = electron.app;
|
||||
const path = require('path');
|
||||
const {app} = require('electron')
|
||||
const path = require('path')
|
||||
|
||||
app.on('ready', function() {
|
||||
var protocol = electron.protocol;
|
||||
protocol.registerFileProtocol('atom', function(request, callback) {
|
||||
var url = request.url.substr(7);
|
||||
callback({path: path.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.join(__dirname, url)})
|
||||
}, function (error) {
|
||||
if (error) console.error('Failed to register protocol')
|
||||
})
|
||||
})
|
||||
```
|
||||
|
||||
**Note:** このモジュールは、`app`モジュールで`ready`イベントが出力された後のみ使うことができます。
|
||||
|
@ -77,12 +75,11 @@ 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')
|
||||
});
|
||||
if (error) console.error('Failed to register protocol')
|
||||
})
|
||||
```
|
||||
|
||||
### `protocol.registerStringProtocol(scheme, handler[, completion])`
|
||||
|
|
|
@ -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
|
||||
```
|
||||
|
||||
## メソッド
|
||||
|
|
|
@ -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;
|
||||
if (displays[i].bounds.x !== 0 || displays[i].bounds.y !== 0) {
|
||||
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` オブジェクト
|
||||
|
|
|
@ -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,23 @@ 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) {
|
||||
if (error) console.error(error)
|
||||
console.log(cookies)
|
||||
})
|
||||
|
||||
// Query all cookies associated with a specific url.
|
||||
session.defaultSession.cookies.get({ url : "http://www.github.com" }, function(error, cookies) {
|
||||
console.log(cookies);
|
||||
});
|
||||
session.defaultSession.cookies.get({ url: 'http://www.github.com' }, function (error, cookies) {
|
||||
if (error) console.error(error)
|
||||
console.log(cookies)
|
||||
})
|
||||
|
||||
// Set a cookie with the given cookie data;
|
||||
// may overwrite equivalent cookies if they exist.
|
||||
var cookie = { url : "http://www.github.com", name : "dummy_name", value : "dummy" };
|
||||
session.defaultSession.cookies.set(cookie, function(error) {
|
||||
if (error)
|
||||
console.error(error);
|
||||
});
|
||||
var cookie = { url: 'http://www.github.com', name: 'dummy_name', value: 'dummy' }
|
||||
session.defaultSession.cookies.set(cookie, function (error) {
|
||||
if (error) console.error(error)
|
||||
})
|
||||
```
|
||||
|
||||
#### `ses.cookies.get(filter, callback)`
|
||||
|
@ -232,13 +233,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 +255,9 @@ window.webContents.session.enableNetworkEmulation({offline: true});
|
|||
Calling `setCertificateVerifyProc(null)`をコールして、既定の証明書検証ロジックに戻します。
|
||||
|
||||
```javascript
|
||||
myWindow.webContents.session.setCertificateVerifyProc(function(hostname, cert, callback) {
|
||||
if (hostname == 'github.com')
|
||||
callback(true);
|
||||
else
|
||||
callback(false);
|
||||
});
|
||||
myWindow.webContents.session.setCertificateVerifyProc(function (hostname, cert, callback) {
|
||||
callback(hostname === 'github.com')
|
||||
})
|
||||
```
|
||||
|
||||
#### `ses.webRequest`
|
||||
|
@ -275,13 +273,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)`
|
||||
|
|
|
@ -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')
|
||||
```
|
||||
|
||||
## メソッド
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
})
|
||||
|
||||
```
|
||||
|
||||
|
|
|
@ -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)`
|
||||
|
|
|
@ -185,15 +185,15 @@ Electronアプリ内でウェブページのような外部コンテンツを埋
|
|||
|
||||
```javascript
|
||||
webview.addEventListener('dom-ready', () => {
|
||||
webview.openDevTools();
|
||||
});
|
||||
webview.openDevTools()
|
||||
})
|
||||
```
|
||||
|
||||
### `<webview>.loadURL(url[, options])`
|
||||
|
||||
* `url` URL
|
||||
* `options` Object (optional)
|
||||
* `httpReferrer` String - リファラURL
|
||||
* `httpReferrer` String - リファラURL
|
||||
* `userAgent` String - リクエストに使用されるUser agent
|
||||
* `extraHeaders` String - 追加のヘッダを"\n"で区切って指定します。
|
||||
|
||||
|
@ -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'
|
||||
|
@ -577,11 +577,10 @@ webview.addEventListener('console-message', (e) => {
|
|||
|
||||
```javascript
|
||||
webview.addEventListener('found-in-page', (e) => {
|
||||
if (e.result.finalUpdate)
|
||||
webview.stopFindInPage('keepSelection');
|
||||
});
|
||||
if (e.result.finalUpdate) webview.stopFindInPage('keepSelection')
|
||||
})
|
||||
|
||||
const requestId = webview.findInPage('test');
|
||||
const requestId = webview.findInPage('test')
|
||||
```
|
||||
|
||||
### Event: 'new-window'
|
||||
|
@ -599,14 +598,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 +655,8 @@ webview.addEventListener('new-window', (e) => {
|
|||
|
||||
```javascript
|
||||
webview.addEventListener('close', () => {
|
||||
webview.src = 'about:blank';
|
||||
});
|
||||
webview.src = 'about:blank'
|
||||
})
|
||||
```
|
||||
|
||||
### Event: 'ipc-message'
|
||||
|
@ -674,18 +673,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'
|
||||
|
|
|
@ -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'))
|
||||
```
|
||||
|
||||
そして、次の形式かどうかを確認します。
|
||||
|
|
|
@ -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 の制限
|
||||
|
|
|
@ -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,21 +87,21 @@ __Dock menu of Terminal.app:__
|
|||
カスタムドックメニューを設定するために、macOSのみに提供されている `app.dock.setMenu` APIを使用できます。
|
||||
|
||||
```javascript
|
||||
const electron = require('electron');
|
||||
const app = electron.app;
|
||||
const Menu = electron.Menu;
|
||||
const {app, Menu} = require('electron')
|
||||
|
||||
const dockMenu = Menu.buildFromTemplate([
|
||||
{ label: 'New Window', click() { console.log('New Window'); } },
|
||||
{ label: 'New Window with Settings', submenu: [
|
||||
{ label: 'Basic' },
|
||||
{ label: 'Pro'}
|
||||
{label: 'New Window', click () { console.log('New Window') }},
|
||||
{label: 'New Window with Settings',
|
||||
submenu: [
|
||||
{label: 'Basic'},
|
||||
{label: 'Pro'}
|
||||
]},
|
||||
{ label: 'New Command...'}
|
||||
]);
|
||||
app.dock.setMenu(dockMenu);
|
||||
{label: 'New Command...'}
|
||||
])
|
||||
app.dock.setMenu(dockMenu)
|
||||
```
|
||||
|
||||
|
||||
## ユーザータスク (Windows)
|
||||
|
||||
Windowsでは、ジャンプリストの `Tasks` カテゴリでカスタムアクションを指定できます。
|
||||
|
@ -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)
|
||||
|
@ -206,8 +206,8 @@ __タスクバーボタン上の進行状況バー:__
|
|||
ウィンドウに進行状況バーを設定するために、[BrowserWindow.setProgressBar][setprogressbar] APIを使えます:
|
||||
|
||||
```javascript
|
||||
let win = new BrowserWindow({...});
|
||||
win.setProgressBar(0.5);
|
||||
let win = new BrowserWindow()
|
||||
win.setProgressBar(0.5)
|
||||
```
|
||||
|
||||
## タスクバーでアイコンをオーバーレイする (Windows)
|
||||
|
@ -223,8 +223,8 @@ __タスクバーボタンでのオーバーレイ:__
|
|||
ウィンドウでオーバーレイアイコンを設定するために、[BrowserWindow.setOverlayIcon][setoverlayicon] APIを使用できます。
|
||||
|
||||
```javascript
|
||||
let win = new BrowserWindow({...});
|
||||
win.setOverlayIcon('path/to/overlay.png', 'Description for overlay');
|
||||
let win = new BrowserWindow()
|
||||
win.setOverlayIcon('path/to/overlay.png', 'Description for overlay')
|
||||
```
|
||||
|
||||
## Windowのファイル表示 (macOS)
|
||||
|
@ -240,9 +240,9 @@ __Represented file ポップアップメニュー:__
|
|||
ウィンドウにrepresented fileを設定するために、[BrowserWindow.setRepresentedFilename][setrepresentedfilename] と [BrowserWindow.setDocumentEdited][setdocumentedited] APIsを使えます:
|
||||
|
||||
```javascript
|
||||
let win = new BrowserWindow({...});
|
||||
win.setRepresentedFilename('/etc/passwd');
|
||||
win.setDocumentEdited(true);
|
||||
let win = new BrowserWindow()
|
||||
win.setRepresentedFilename('/etc/passwd')
|
||||
win.setDocumentEdited(true)
|
||||
```
|
||||
|
||||
[addrecentdocument]: ../api/app.md#appaddrecentdocumentpath-os-x-windows
|
||||
|
|
|
@ -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 エクステンションのフォーマット
|
||||
|
|
|
@ -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_
|
||||
|
|
|
@ -39,7 +39,7 @@ your-app/
|
|||
|
||||
`package.json` の形式は Node モジュールとまったく同じです。 `main` フィールドで指定するスクリプトはアプリの起動スクリプトであり、メインプロセスを実行します。 `package.json` の例は次のようになります:
|
||||
|
||||
```json
|
||||
```javascripton
|
||||
{
|
||||
"name" : "your-app",
|
||||
"version" : "0.1.0",
|
||||
|
@ -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することもできる。
|
||||
|
|
|
@ -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プラグインを有効化
|
||||
|
|
|
@ -15,7 +15,7 @@ Electronで `chromedriver` を使用するために、Electronがどこにある
|
|||
$ npm install --save-dev spectron
|
||||
```
|
||||
|
||||
```js
|
||||
```javascript
|
||||
// 可視のウィンドウがタイトル付きで開かれているかを調べる簡単なテスト
|
||||
var Application = require('spectron').Application
|
||||
var assert = require('assert')
|
||||
|
@ -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()
|
||||
```
|
||||
|
||||
## ワークフロー
|
||||
|
|
|
@ -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
|
||||
}
|
||||
});
|
||||
});
|
||||
})
|
||||
})
|
||||
```
|
||||
|
||||
## プラグインの検証
|
||||
|
|
|
@ -645,15 +645,21 @@ app.setJumpList([
|
|||
name: 'Tools',
|
||||
items: [
|
||||
{
|
||||
type: 'task', title: 'Tool A',
|
||||
program: process.execPath, args: '--run-tool-a',
|
||||
icon: process.execPath, iconIndex: 0,
|
||||
type: 'task',
|
||||
title: 'Tool A',
|
||||
program: process.execPath,
|
||||
args: '--run-tool-a',
|
||||
icon: process.execPath,
|
||||
iconIndex: 0,
|
||||
description: 'Runs Tool A'
|
||||
},
|
||||
{
|
||||
type: 'task', title: 'Tool B',
|
||||
program: process.execPath, args: '--run-tool-b',
|
||||
icon: process.execPath, iconIndex: 0,
|
||||
type: 'task',
|
||||
title: 'Tool B',
|
||||
program: process.execPath,
|
||||
args: '--run-tool-b',
|
||||
icon: process.execPath,
|
||||
iconIndex: 0,
|
||||
description: 'Runs Tool B'
|
||||
}
|
||||
]
|
||||
|
@ -662,14 +668,18 @@ app.setJumpList([
|
|||
{ // has no name and no type so `type` is assumed to be "tasks"
|
||||
items: [
|
||||
{
|
||||
type: 'task', title: 'New Project',
|
||||
program: process.execPath, args: '--new-project',
|
||||
type: 'task',
|
||||
title: 'New Project',
|
||||
program: process.execPath,
|
||||
args: '--new-project',
|
||||
description: 'Create a new project.'
|
||||
},
|
||||
{ type: 'separator' },
|
||||
{
|
||||
type: 'task', title: 'Recover Project',
|
||||
program: process.execPath, args: '--recover-project',
|
||||
type: 'task',
|
||||
title: 'Recover Project',
|
||||
program: process.execPath,
|
||||
args: '--recover-project',
|
||||
description: 'Recover Project'
|
||||
}
|
||||
]
|
||||
|
|
|
@ -97,7 +97,7 @@ Returns `Object`:
|
|||
**참고:** 윈도우의 대부분의 앱은 북마크 붙여넣기를 지원하지 않습니다.
|
||||
`clipboard.write` 를 통해 북마크와 대체 텍스트를 클립보드에 쓸 수 있습니다.
|
||||
|
||||
```js
|
||||
```javascript
|
||||
clipboard.write({
|
||||
text: 'http://electron.atom.io',
|
||||
bookmark: 'Electron Homepage'
|
||||
|
|
|
@ -147,7 +147,7 @@ if (browserOptions.transparent) {
|
|||
|
||||
사용자의 현재 시스템 전체 색상 환경설정을 RGBA 16진 문자열 형태로 반환합니다.
|
||||
|
||||
```js
|
||||
```javascript
|
||||
const color = systemPreferences.getAccentColor() // `"aabbccdd"`
|
||||
const red = color.substr(0, 2) // "aa"
|
||||
const green = color.substr(2, 2) // "bb"
|
||||
|
|
|
@ -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" */ }
|
||||
}
|
||||
```
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ $ code electron-quick-start
|
|||
|
||||
### 2. 다음 설정으로 `.vscode/launch.json` 파일 추가하기:
|
||||
|
||||
```json
|
||||
```javascripton
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
|
|
|
@ -116,7 +116,8 @@ const {app, Menu} = require('electron')
|
|||
|
||||
const dockMenu = Menu.buildFromTemplate([
|
||||
{label: 'New Window', click () { console.log('New Window') }},
|
||||
{label: 'New Window with Settings', submenu: [
|
||||
{label: 'New Window with Settings',
|
||||
submenu: [
|
||||
{label: 'Basic'},
|
||||
{label: 'Pro'}
|
||||
]},
|
||||
|
|
|
@ -61,7 +61,7 @@ your-app/
|
|||
파일을 지정하면 메인 프로세스의 엔트리 포인트로 사용합니다. 예를 들어 사용할 수 있는
|
||||
`package.json`은 다음과 같습니다:
|
||||
|
||||
```json
|
||||
```javascripton
|
||||
{
|
||||
"name" : "your-app",
|
||||
"version" : "0.1.0",
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
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:
|
||||
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')
|
||||
})
|
||||
```
|
||||
|
||||
|
@ -365,26 +365,23 @@ No macOS o sistema enforça instância única automaticamente quando usuários t
|
|||
|
||||
Um exemplo de ativação da janela de primeira instância quando uma segunda instância inicializa:
|
||||
|
||||
```js
|
||||
var myWindow = null;
|
||||
```javascript
|
||||
let myWindow = null
|
||||
|
||||
var shouldQuit = app.makeSingleInstance(function(commandLine, workingDirectory) {
|
||||
let shouldQuit = app.makeSingleInstance(function (commandLine, workingDirectory) {
|
||||
// Alguém tentou rodar uma segunda instância, devemos focar nossa janela
|
||||
if (myWindow) {
|
||||
if (myWindow.isMinimized()) myWindow.restore();
|
||||
myWindow.focus();
|
||||
if (myWindow.isMinimized()) myWindow.restore()
|
||||
myWindow.focus()
|
||||
}
|
||||
return true;
|
||||
});
|
||||
return true
|
||||
})
|
||||
|
||||
if (shouldQuit) {
|
||||
app.quit();
|
||||
return;
|
||||
}
|
||||
if (shouldQuit) app.quit()
|
||||
|
||||
// Cria myWindow, carrega o resto do aplicativo, etc...
|
||||
app.on('ready', function() {
|
||||
});
|
||||
app.on('ready', function () {
|
||||
// Cria myWindow, carrega o resto do aplicativo, etc...
|
||||
})
|
||||
```
|
||||
|
||||
### `app.setAppUserModelId(id)` _Windows_
|
||||
|
|
|
@ -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'
|
||||
|
@ -191,13 +191,13 @@ 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) {
|
||||
```javascript
|
||||
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`
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -16,14 +16,14 @@ Emitido quando o Electron carregou seu script de inicialização interno e está
|
|||
|
||||
Pode ser utilizado pelo script pré-carregamento (preload.js abaixo) para adicionar símbolos globais do Node removidos para o escopo global quando a integração do node é desligada:
|
||||
|
||||
```js
|
||||
```javascript
|
||||
// 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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
})
|
||||
```
|
|
@ -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
|
||||
|
|
|
@ -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,18 @@ 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 dockMenu = Menu.buildFromTemplate([
|
||||
{ label: 'New Window', click: function() { console.log('New Window'); } },
|
||||
{ label: 'New Window with Settings', submenu: [
|
||||
{ label: 'Basic' },
|
||||
{ label: 'Pro'}
|
||||
const {app, Menu} = require('electron')
|
||||
|
||||
const dockMenu = Menu.buildFromTemplate([
|
||||
{label: 'New Window', click () { console.log('New Window') }},
|
||||
{label: 'New Window with Settings',
|
||||
submenu: [
|
||||
{label: 'Basic'},
|
||||
{label: 'Pro'}
|
||||
]},
|
||||
{ label: 'New Command...'}
|
||||
]);
|
||||
app.dock.setMenu(dockMenu);
|
||||
{label: 'New Command...'}
|
||||
])
|
||||
app.dock.setMenu(dockMenu)
|
||||
```
|
||||
|
||||
## Tarefas do Usuário (Windows)
|
||||
|
@ -114,7 +115,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 +125,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,
|
||||
|
@ -163,33 +164,33 @@ __Miniaturas da barra de tarefas do Windows Media Player:__
|
|||
Você pode usar [BrowserWindow.setThumbarButtons][setthumbarbuttons] para criar
|
||||
miniaturas na barra de ferramentas para sua aplicação.
|
||||
|
||||
```
|
||||
var BrowserWindow = require('browser-window');
|
||||
var path = require('path');
|
||||
```javascript
|
||||
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.') }
|
||||
}
|
||||
]);
|
||||
])
|
||||
```
|
||||
|
||||
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)
|
||||
|
@ -222,8 +223,8 @@ Para adicionar uma barra de progresso para uma janela, você pode ver a API:
|
|||
[BrowserWindow.setProgressBar][setprogressbar]:
|
||||
|
||||
```javascript
|
||||
var window = new BrowserWindow({...});
|
||||
window.setProgressBar(0.5);
|
||||
var window = new BrowserWindow()
|
||||
window.setProgressBar(0.5)
|
||||
```
|
||||
|
||||
## Representação do arquivo na janela (macOS)
|
||||
|
@ -244,9 +245,9 @@ Para inserir o arquivo de representacão da janela, você pode usar as API
|
|||
[BrowserWindow.setDocumentEdited][setdocumentedited]:
|
||||
|
||||
```javascript
|
||||
var window = new BrowserWindow({...});
|
||||
window.setRepresentedFilename('/etc/passwd');
|
||||
window.setDocumentEdited(true);
|
||||
var window = new BrowserWindow()
|
||||
window.setRepresentedFilename('/etc/passwd')
|
||||
window.setDocumentEdited(true)
|
||||
```
|
||||
|
||||
[addrecentdocument]: ../api/app.md#appaddrecentdocumentpath
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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_
|
||||
|
@ -66,18 +66,18 @@ _online-status.html_
|
|||
```html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
<script>
|
||||
var ipc = require('ipc');
|
||||
var updateOnlineStatus = function() {
|
||||
ipc.send('online-status-changed', navigator.onLine ? 'online' : 'offline');
|
||||
};
|
||||
<body>
|
||||
<script>
|
||||
const {ipcRenderer} = require('electron')
|
||||
const updateOnlineStatus = () => {
|
||||
ipcRenderer.send('online-status-changed', navigator.onLine ? 'online' : 'offline')
|
||||
}
|
||||
|
||||
window.addEventListener('online', updateOnlineStatus);
|
||||
window.addEventListener('offline', updateOnlineStatus);
|
||||
window.addEventListener('online', updateOnlineStatus)
|
||||
window.addEventListener('offline', updateOnlineStatus)
|
||||
|
||||
updateOnlineStatus();
|
||||
</script>
|
||||
</body>
|
||||
updateOnlineStatus()
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
|
|
@ -63,7 +63,7 @@ e o script especificado pelo campo `main` é o script de inicialização do seu
|
|||
que irá executar o processo principal. Um exemplo do seu `package.json` deve parecer
|
||||
com isso:
|
||||
|
||||
```json
|
||||
```javascripton
|
||||
{
|
||||
"name" : "seu-app",
|
||||
"version" : "0.1.0",
|
||||
|
|
|
@ -20,40 +20,37 @@ para a linha de comando do Electron ou usando o método
|
|||
Por exemplo:
|
||||
|
||||
```javascript
|
||||
var app = require('app');
|
||||
var BrowserWindow = require('browser-window');
|
||||
const {app, BrowserWindow} = require('electron')
|
||||
|
||||
// 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;
|
||||
let mainWindow = null
|
||||
|
||||
// Sai assim que todas as janelas forem fechadas.
|
||||
app.on('window-all-closed', function() {
|
||||
if (process.platform != 'darwin') {
|
||||
app.quit();
|
||||
}
|
||||
});
|
||||
app.on('window-all-closed', function () {
|
||||
if (process.platform !== 'darwin') 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>`
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -60,7 +60,7 @@ your-app/
|
|||
как `main`, будет выполняться при запуске вашего приложения, работая в
|
||||
главном процессе. Например, Ваш `package.json` может выглядеть вот так:
|
||||
|
||||
```json
|
||||
```javascripton
|
||||
{
|
||||
"name" : "your-app",
|
||||
"version" : "0.1.0",
|
||||
|
@ -91,7 +91,7 @@ function createWindow () {
|
|||
mainWindow = new BrowserWindow({width: 800, height: 600})
|
||||
|
||||
// и загружаем index.html приложения.
|
||||
mainWindow.loadURL('file://' + __dirname + '/index.html')
|
||||
mainWindow.loadURL(`file://${__dirname}/index.html`)
|
||||
|
||||
// Открываем DevTools.
|
||||
mainWindow.webContents.openDevTools()
|
||||
|
@ -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.
|
||||
|
||||
```
|
||||
|
||||
|
|
|
@ -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)
|
||||
})
|
||||
```
|
||||
|
|
|
@ -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)
|
||||
})
|
||||
```
|
||||
|
|
|
@ -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'
|
||||
|
@ -363,29 +363,26 @@ app.on('login', function(event, webContents, request, authInfo, callback) {
|
|||
|
||||
下面是一个简单的例子。我们可以通过这个例子了解如何确保应用为单实例运行状态。
|
||||
|
||||
```js
|
||||
var myWindow = null;
|
||||
```javascript
|
||||
let myWindow = null
|
||||
|
||||
var shouldQuit = app.makeSingleInstance(function(commandLine, workingDirectory) {
|
||||
let shouldQuit = app.makeSingleInstance(function (commandLine, workingDirectory) {
|
||||
// 当另一个实例运行的时候,这里将会被调用,我们需要激活应用的窗口
|
||||
if (myWindow) {
|
||||
if (myWindow.isMinimized()) myWindow.restore();
|
||||
myWindow.focus();
|
||||
if (myWindow.isMinimized()) myWindow.restore()
|
||||
myWindow.focus()
|
||||
}
|
||||
return true;
|
||||
});
|
||||
return true
|
||||
})
|
||||
|
||||
// 这个实例是多余的实例,需要退出
|
||||
if (shouldQuit) {
|
||||
app.quit();
|
||||
return;
|
||||
}
|
||||
|
||||
// 创建窗口、继续加载应用、应用逻辑等……
|
||||
app.on('ready', function() {
|
||||
});
|
||||
if (shouldQuit) app.quit()
|
||||
|
||||
app.on('ready', function () {
|
||||
// 创建窗口、继续加载应用、应用逻辑等……
|
||||
})
|
||||
```
|
||||
|
||||
### `app.setAppUserModelId(id)` _Windows_
|
||||
|
||||
* `id` String
|
||||
|
@ -400,24 +397,24 @@ app.on('ready', function() {
|
|||
|
||||
举个例子:
|
||||
|
||||
```js
|
||||
let browserOptions = {width: 1000, height: 800};
|
||||
```javascript
|
||||
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])`
|
||||
|
|
|
@ -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'
|
||||
|
@ -233,13 +233,13 @@ window.onbeforeunload = function(e) {
|
|||
在请求一个[App Command](https://msdn.microsoft.com/en-us/library/windows/desktop/ms646275(v=vs.85).aspx)的时候触发.
|
||||
典型的是键盘媒体或浏览器命令, Windows上的 "Back" 按钮用作鼠标也会触发.
|
||||
|
||||
```js
|
||||
someWindow.on('app-command', function(e, cmd) {
|
||||
```javascript
|
||||
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`
|
||||
|
|
|
@ -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`
|
||||
|
|
|
@ -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` .
|
|
@ -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)
|
||||
})
|
||||
```
|
||||
|
||||
## 方法
|
||||
|
|
|
@ -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
|
||||
});
|
||||
})
|
||||
```
|
||||
|
||||
可以使用下面的项目来创建一个服务器,用来接收和处理崩溃报告 :
|
||||
|
|
|
@ -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')
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -61,4 +61,4 @@ function getUserMediaError(e) {
|
|||
* `name` String - 捕获窗口或屏幕的描述名 . 如果资源为屏幕,名字为 `Entire Screen` 或 `Screen <index>`; 如果资源为窗口, 名字为窗口的标题.
|
||||
* `thumbnail` [NativeImage](NativeImage.md) - 缩略图.
|
||||
|
||||
**注意:** 不能保证 `source.thumbnail` 的 size 和 `options` 中的 `thumnbailSize` 一直一致. 它也取决于屏幕或窗口的缩放比例.
|
||||
**注意:** 不能保证 `source.thumbnail` 的 size 和 `options` 中的 `thumnbailSize` 一直一致. 它也取决于屏幕或窗口的缩放比例.
|
||||
|
|
|
@ -5,9 +5,8 @@
|
|||
对话框例子,展示了选择文件和目录:
|
||||
|
||||
```javascript
|
||||
var win = ...; // BrowserWindow in which to show the dialog
|
||||
const dialog = require('electron').dialog;
|
||||
console.log(dialog.showOpenDialog({ properties: [ 'openFile', 'openDirectory', 'multiSelections' ]}));
|
||||
const {dialog} = require('electron')
|
||||
console.log(dialog.showOpenDialog({properties: ['openFile', 'openDirectory', 'multiSelections']}))
|
||||
```
|
||||
|
||||
**macOS 上的注意事项**: 如果你想像sheets一样展示对话框,只需要在`browserWindow` 参数中提供一个 `BrowserWindow` 的引用对象.
|
||||
|
@ -91,4 +90,4 @@ console.log(dialog.showOpenDialog({ properties: [ 'openFile', 'openDirectory', '
|
|||
|
||||
展示一个传统的包含错误信息的对话框.
|
||||
|
||||
在 `app` 模块触发 `ready` 事件之前,这个 api 可以被安全调用,通常它被用来在启动的早期阶段报告错误. 在 Linux 上,如果在 `app` 模块触发 `ready` 事件之前调用,message 将会被触发显示stderr,并且没有实际GUI 框显示.
|
||||
在 `app` 模块触发 `ready` 事件之前,这个 api 可以被安全调用,通常它被用来在启动的早期阶段报告错误. 在 Linux 上,如果在 `app` 模块触发 `ready` 事件之前调用,message 将会被触发显示stderr,并且没有实际GUI 框显示.
|
||||
|
|
|
@ -6,22 +6,31 @@
|
|||
|
||||
```javascript
|
||||
// In the main process.
|
||||
win.webContents.session.on('will-download', function(event, item, webContents) {
|
||||
const {BrowserWindow} = require('electron')
|
||||
let win = new BrowserWindow()
|
||||
win.webContents.session.on('will-download', (event, item, webContents) => {
|
||||
// Set the save path, making Electron not to prompt a save dialog.
|
||||
item.setSavePath('/tmp/save.pdf');
|
||||
console.log(item.getMimeType());
|
||||
console.log(item.getFilename());
|
||||
console.log(item.getTotalBytes());
|
||||
item.on('updated', function() {
|
||||
console.log('Received bytes: ' + item.getReceivedBytes());
|
||||
});
|
||||
item.on('done', function(e, state) {
|
||||
if (state == "completed") {
|
||||
console.log("Download successfully");
|
||||
} else {
|
||||
console.log("Download is cancelled or interrupted that can't be resumed");
|
||||
item.setSavePath('/tmp/save.pdf')
|
||||
|
||||
item.on('updated', (event, state) => {
|
||||
if (state === 'interrupted') {
|
||||
console.log('Download is interrupted but can be resumed')
|
||||
} else if (state === 'progressing') {
|
||||
if (item.isPaused()) {
|
||||
console.log('Download is paused')
|
||||
} else {
|
||||
console.log(`Received bytes: ${item.getReceivedBytes()}`)
|
||||
}
|
||||
}
|
||||
});
|
||||
})
|
||||
item.once('done', (event, state) => {
|
||||
if (state === 'completed') {
|
||||
console.log('Download successfully')
|
||||
} else {
|
||||
console.log(`Download failed: ${state}`)
|
||||
}
|
||||
})
|
||||
})
|
||||
```
|
||||
|
||||
## 事件
|
||||
|
|
|
@ -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 })
|
||||
```
|
||||
|
||||
### 限制
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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')
|
||||
```
|
||||
|
||||
## 监听消息
|
||||
|
|
|
@ -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')
|
||||
```
|
||||
|
||||
## 监听消息
|
||||
|
|
|
@ -67,7 +67,7 @@ var template = [
|
|||
label: 'Select All',
|
||||
accelerator: 'CmdOrCtrl+A',
|
||||
role: 'selectall'
|
||||
},
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
|
@ -76,37 +76,32 @@ var template = [
|
|||
{
|
||||
label: 'Reload',
|
||||
accelerator: 'CmdOrCtrl+R',
|
||||
click: function(item, focusedWindow) {
|
||||
if (focusedWindow)
|
||||
focusedWindow.reload();
|
||||
click: function (item, focusedWindow) {
|
||||
if (focusedWindow) focusedWindow.reload()
|
||||
}
|
||||
},
|
||||
{
|
||||
label: 'Toggle Full Screen',
|
||||
accelerator: (function() {
|
||||
if (process.platform == 'darwin')
|
||||
return 'Ctrl+Command+F';
|
||||
else
|
||||
return 'F11';
|
||||
accelerator: (function () {
|
||||
return (process.platform === 'darwin') ? 'Ctrl+Command+F' : 'F11'
|
||||
})(),
|
||||
click: function(item, focusedWindow) {
|
||||
if (focusedWindow)
|
||||
focusedWindow.setFullScreen(!focusedWindow.isFullScreen());
|
||||
click: function (item, focusedWindow) {
|
||||
if (focusedWindow) focusedWindow.setFullScreen(!focusedWindow.isFullScreen())
|
||||
}
|
||||
},
|
||||
{
|
||||
label: 'Toggle Developer Tools',
|
||||
accelerator: (function() {
|
||||
if (process.platform == 'darwin')
|
||||
return 'Alt+Command+I';
|
||||
else
|
||||
return 'Ctrl+Shift+I';
|
||||
accelerator: (function () {
|
||||
if (process.platform === 'darwin') {
|
||||
return 'Alt+Command+I'
|
||||
} else {
|
||||
return 'Ctrl+Shift+I'
|
||||
}
|
||||
})(),
|
||||
click: function(item, focusedWindow) {
|
||||
if (focusedWindow)
|
||||
focusedWindow.toggleDevTools();
|
||||
click: function (item, focusedWindow) {
|
||||
if (focusedWindow) focusedWindow.toggleDevTools()
|
||||
}
|
||||
},
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
|
@ -122,7 +117,7 @@ var template = [
|
|||
label: 'Close',
|
||||
accelerator: 'CmdOrCtrl+W',
|
||||
role: 'close'
|
||||
},
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
|
@ -131,14 +126,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();
|
||||
if (process.platform === 'darwin') {
|
||||
var name = require('electron').remote.app.getName()
|
||||
template.unshift({
|
||||
label: name,
|
||||
submenu: [
|
||||
|
@ -177,10 +172,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 +185,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
|
||||
|
@ -352,4 +347,4 @@ Property List Files][AboutInformationPropertyListFiles] .
|
|||
|
||||
[AboutInformationPropertyListFiles]: https://developer.apple.com/library/ios/documentation/general/Reference/InfoPlistKeyReference/Articles/AboutInformationPropertyListFiles.html
|
||||
[setMenu]:
|
||||
https://github.com/electron/electron/blob/master/docs/api/browser-window.md#winsetmenumenu-linux-windows
|
||||
https://github.com/electron/electron/blob/master/docs/api/browser-window.md#winsetmenumenu-linux-windows
|
||||
|
|
|
@ -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()`
|
||||
|
|
|
@ -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')
|
||||
})
|
||||
})
|
||||
```
|
||||
|
||||
## 事件
|
||||
|
|
|
@ -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)
|
||||
```
|
||||
|
||||
## 方法
|
||||
|
|
|
@ -17,14 +17,14 @@ Electron 中的 `process` 对象 与 upstream node 中的有以下的不同点:
|
|||
|
||||
当node被完全关闭的时候,它可以被预加载脚本使用来添加(原文: removed)与node无关的全局符号来回退到全局范围:
|
||||
|
||||
```js
|
||||
```javascript
|
||||
// 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
|
||||
})
|
||||
```
|
||||
|
||||
## 属性
|
||||
|
|
|
@ -5,20 +5,17 @@
|
|||
例子,使用一个与 `file://` 功能相似的协议 :
|
||||
|
||||
```javascript
|
||||
const electron = require('electron');
|
||||
const app = electron.app;
|
||||
const path = require('path');
|
||||
const {app, protocol} = require('electron')
|
||||
const path = require('path')
|
||||
|
||||
app.on('ready', function() {
|
||||
var protocol = electron.protocol;
|
||||
protocol.registerFileProtocol('atom', function(request, callback) {
|
||||
var url = request.url.substr(7);
|
||||
callback({path: path.normalize(__dirname + '/' + url)});
|
||||
}, function (error) {
|
||||
if (error)
|
||||
console.error('Failed to register protocol')
|
||||
});
|
||||
});
|
||||
app.on('ready', () => {
|
||||
protocol.registerFileProtocol('atom', (request, callback) => {
|
||||
const url = request.url.substr(7)
|
||||
callback({path: path.normalize(`${__dirname}/${url}`)})
|
||||
}, (error) => {
|
||||
if (error) console.error('Failed to register protocol')
|
||||
})
|
||||
})
|
||||
```
|
||||
|
||||
**注意:** 这个模块只有在 `app` 模块的 `ready` 事件触发之后才可使用.
|
||||
|
@ -63,7 +60,7 @@ app.on('ready', function() {
|
|||
为了处理请求,调用 `callback` 时需要使用文件路径或者一个带 `path` 参数的对象, 例如 `callback(filePath)` 或
|
||||
`callback({path: filePath})`.
|
||||
|
||||
当不使用任何参数调用 `callback` 时,你可以指定一个数字或一个带有 `error` 参数的对象,来标识 `request` 失败.你可以使用的 error number 可以参考
|
||||
当不使用任何参数调用 `callback` 时,你可以指定一个数字或一个带有 `error` 参数的对象,来标识 `request` 失败.你可以使用的 error number 可以参考
|
||||
[net error list][net-error].
|
||||
|
||||
默认 `scheme` 会被注册为一个 `http:` 协议,它与遵循 "generic URI syntax" 规则的协议解析不同,例如 `file:` ,所以你或许应该调用 `protocol.registerStandardSchemes` 来创建一个标准的 scheme.
|
||||
|
@ -82,12 +79,11 @@ 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')
|
||||
});
|
||||
if (error) console.error('Failed to register protocol')
|
||||
})
|
||||
```
|
||||
|
||||
### `protocol.registerStringProtocol(scheme, handler[, completion])`
|
||||
|
@ -180,4 +176,4 @@ which sends a new HTTP request as a response.
|
|||
* `completion` Function
|
||||
取消对 `scheme` 的拦截,使用它的原始句柄进行处理.
|
||||
|
||||
[net-error]: https://code.google.com/p/chromium/codesearch#chromium/src/net/base/net_error_list.h
|
||||
[net-error]: https://code.google.com/p/chromium/codesearch#chromium/src/net/base/net_error_list.h
|
||||
|
|
|
@ -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
|
||||
```
|
||||
|
||||
## 方法
|
||||
|
|
|
@ -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;
|
||||
if (displays[i].bounds.x !== 0 || displays[i].bounds.y !== 0) {
|
||||
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` 对象
|
||||
|
|
|
@ -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,28 +76,29 @@ 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) {
|
||||
if (error) console.error(error)
|
||||
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) {
|
||||
if (error) console.error(error)
|
||||
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) {
|
||||
if (error)
|
||||
console.error(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)
|
||||
})
|
||||
```
|
||||
|
||||
#### `ses.cookies.get(filter, callback)`
|
||||
|
||||
* `filter` Object
|
||||
* `url` String (可选) - 与获取 cookies 相关的
|
||||
* `url` String (可选) - 与获取 cookies 相关的
|
||||
`url`.不设置的话就是从所有 url 获取 cookies .
|
||||
* `name` String (可选) - 通过 name 过滤 cookies.
|
||||
* `domain` String (可选) - 获取对应域名或子域名的 cookies .
|
||||
|
@ -106,7 +107,7 @@ session.defaultSession.cookies.set(cookie, function(error) {
|
|||
* `session` Boolean (可选) - 过滤掉 session 或 持久的 cookies.
|
||||
* `callback` Function
|
||||
|
||||
发送一个请求,希望获得所有匹配 `details` 的 cookies,
|
||||
发送一个请求,希望获得所有匹配 `details` 的 cookies,
|
||||
在完成的时候,将通过 `callback(error, cookies)` 调用 `callback`.
|
||||
|
||||
`cookies`是一个 `cookie` 对象.
|
||||
|
@ -126,7 +127,7 @@ session.defaultSession.cookies.set(cookie, function(error) {
|
|||
#### `ses.cookies.set(details, callback)`
|
||||
|
||||
* `details` Object
|
||||
* `url` String - 与获取 cookies 相关的
|
||||
* `url` String - 与获取 cookies 相关的
|
||||
`url`.
|
||||
* `name` String - cookie 名. 忽略默认为空.
|
||||
* `value` String - cookie 值. 忽略默认为空.
|
||||
|
@ -142,7 +143,7 @@ session.defaultSession.cookies.set(cookie, function(error) {
|
|||
|
||||
#### `ses.cookies.remove(url, name, callback)`
|
||||
|
||||
* `url` String - 与 cookies 相关的
|
||||
* `url` String - 与 cookies 相关的
|
||||
`url`.
|
||||
* `name` String - 需要删除的 cookie 名.
|
||||
* `callback` Function
|
||||
|
@ -203,7 +204,7 @@ proxyURL = [<proxyScheme>"://"]<proxyHost>[":"<proxyPort>]
|
|||
|
||||
例子:
|
||||
|
||||
* `http=foopy:80;ftp=foopy2` - 为 `http://` URL 使用 HTTP 代理 `foopy:80` , 和为 `ftp://` URL
|
||||
* `http=foopy:80;ftp=foopy2` - 为 `http://` URL 使用 HTTP 代理 `foopy:80` , 和为 `ftp://` URL
|
||||
HTTP 代理 `foopy2:80` .
|
||||
* `foopy:80` - 为所有 URL 使用 HTTP 代理 `foopy:80` .
|
||||
* `foopy:80,bar,direct://` - 为所有 URL 使用 HTTP 代理 `foopy:80` , 如果 `foopy:80` 不可用,则切换使用 `bar`, 再往后就不使用代理了.
|
||||
|
@ -229,7 +230,7 @@ proxyURL = [<proxyScheme>"://"]<proxyHost>[":"<proxyPort>]
|
|||
|
||||
* `options` Object
|
||||
* `offline` Boolean - 是否模拟网络故障.
|
||||
* `latency` Double - 每毫秒的 RTT
|
||||
* `latency` Double - 每毫秒的 RTT
|
||||
* `downloadThroughput` Double - 每 Bps 的下载速率.
|
||||
* `uploadThroughput` Double - 每 Bps 的上载速率.
|
||||
|
||||
|
@ -238,13 +239,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 +262,9 @@ window.webContents.session.enableNetworkEmulation({offline: true});
|
|||
调用了 `setCertificateVerifyProc(null)` ,则将会回复到默认证书验证过程.
|
||||
|
||||
```javascript
|
||||
myWindow.webContents.session.setCertificateVerifyProc(function(hostname, cert, callback) {
|
||||
if (hostname == 'github.com')
|
||||
callback(true);
|
||||
else
|
||||
callback(false);
|
||||
});
|
||||
myWindow.webContents.session.setCertificateVerifyProc(function (hostname, cert, callback) {
|
||||
callback(hostname === 'github.com')
|
||||
})
|
||||
```
|
||||
|
||||
#### `ses.setPermissionRequestHandler(handler)`
|
||||
|
@ -279,16 +277,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 +308,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)`
|
||||
|
@ -478,4 +476,4 @@ session.defaultSession.webRequest.onBeforeSendHeaders(filter, function(details,
|
|||
* `resourceType` String
|
||||
* `timestamp` Double
|
||||
* `fromCache` Boolean
|
||||
* `error` String - 错误描述.
|
||||
* `error` String - 错误描述.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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了。
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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()`
|
||||
|
@ -428,51 +428,51 @@ var currentURL = win.webContents.getURL();
|
|||
|
||||
### `webContents.undo()`
|
||||
|
||||
执行网页的编辑命令 `undo` .
|
||||
执行网页的编辑命令 `undo` .
|
||||
|
||||
### `webContents.redo()`
|
||||
|
||||
执行网页的编辑命令 `redo` .
|
||||
执行网页的编辑命令 `redo` .
|
||||
|
||||
### `webContents.cut()`
|
||||
|
||||
执行网页的编辑命令 `cut` .
|
||||
执行网页的编辑命令 `cut` .
|
||||
|
||||
### `webContents.copy()`
|
||||
|
||||
执行网页的编辑命令 `copy` .
|
||||
执行网页的编辑命令 `copy` .
|
||||
|
||||
### `webContents.paste()`
|
||||
|
||||
执行网页的编辑命令 `paste` .
|
||||
执行网页的编辑命令 `paste` .
|
||||
|
||||
### `webContents.pasteAndMatchStyle()`
|
||||
|
||||
执行网页的编辑命令 `pasteAndMatchStyle` .
|
||||
执行网页的编辑命令 `pasteAndMatchStyle` .
|
||||
|
||||
### `webContents.delete()`
|
||||
|
||||
执行网页的编辑命令 `delete` .
|
||||
执行网页的编辑命令 `delete` .
|
||||
|
||||
### `webContents.selectAll()`
|
||||
|
||||
执行网页的编辑命令 `selectAll` .
|
||||
执行网页的编辑命令 `selectAll` .
|
||||
|
||||
### `webContents.unselect()`
|
||||
|
||||
执行网页的编辑命令 `unselect` .
|
||||
执行网页的编辑命令 `unselect` .
|
||||
|
||||
### `webContents.replace(text)`
|
||||
|
||||
* `text` String
|
||||
|
||||
执行网页的编辑命令 `replace` .
|
||||
执行网页的编辑命令 `replace` .
|
||||
|
||||
### `webContents.replaceMisspelling(text)`
|
||||
|
||||
* `text` String
|
||||
|
||||
执行网页的编辑命令 `replaceMisspelling` .
|
||||
执行网页的编辑命令 `replaceMisspelling` .
|
||||
|
||||
### `webContents.insertText(text)`
|
||||
|
||||
|
@ -507,12 +507,11 @@ var currentURL = win.webContents.getURL();
|
|||
使用给定的 `action` 来为 `webContents` 停止任何 `findInPage` 请求.
|
||||
|
||||
```javascript
|
||||
webContents.on('found-in-page', function(event, result) {
|
||||
if (result.finalUpdate)
|
||||
webContents.stopFindInPage("clearSelection");
|
||||
});
|
||||
webContents.on('found-in-page', function (event, result) {
|
||||
if (result.finalUpdate) webContents.stopFindInPage('clearSelection')
|
||||
})
|
||||
|
||||
const requestId = webContents.findInPage("api");
|
||||
const requestId = webContents.findInPage('api')
|
||||
```
|
||||
|
||||
### `webContents.hasServiceWorker(callback)`
|
||||
|
@ -566,23 +565,22 @@ 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) {
|
||||
if (error)
|
||||
throw error;
|
||||
console.log("Write PDF successfully.");
|
||||
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.')
|
||||
})
|
||||
})
|
||||
});
|
||||
})
|
||||
```
|
||||
|
||||
### `webContents.addWorkSpace(path)`
|
||||
|
@ -592,9 +590,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 +648,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
|
||||
|
@ -666,8 +664,8 @@ app.on('ready', function() {
|
|||
<body>
|
||||
<script>
|
||||
require('electron').ipcRenderer.on('ping', function(event, message) {
|
||||
console.log(message); // Prints "whoooooooh!"
|
||||
});
|
||||
console.log(message) // Prints "whoooooooh!"
|
||||
})
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -686,8 +684,8 @@ app.on('ready', function() {
|
|||
* `height` Integer - 设置模拟屏幕 height
|
||||
* `viewPosition` Object - 在屏幕放置 view
|
||||
(screenPosition == mobile) (默认: `{x: 0, y: 0}`)
|
||||
* `x` Integer - 设置偏移左上角的x轴
|
||||
* `y` Integer - 设置偏移左上角的y轴
|
||||
* `x` Integer - 设置偏移左上角的x轴
|
||||
* `y` Integer - 设置偏移左上角的y轴
|
||||
* `deviceScaleFactor` Integer - 设置设备比例因子 (如果为0,默认为原始屏幕比例) (默认: `0`)
|
||||
* `viewSize` Object - 设置模拟视图 size (空表示不覆盖)
|
||||
* `width` Integer - 设置模拟视图 width
|
||||
|
@ -769,14 +767,13 @@ 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) {
|
||||
if (!error)
|
||||
console.log("Save page successfully");
|
||||
});
|
||||
});
|
||||
win.webContents.on('did-finish-load', function () {
|
||||
win.webContents.savePage('/tmp/test.html', 'HTMLComplete', function (error) {
|
||||
if (!error) console.log('Save page successfully')
|
||||
})
|
||||
})
|
||||
```
|
||||
|
||||
## 实例属性
|
||||
|
@ -803,23 +800,24 @@ 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])`
|
||||
|
|
|
@ -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)`
|
||||
|
|
|
@ -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,11 @@ webview.addEventListener('console-message', function(e) {
|
|||
在请求[`webview.findInPage`](web-view-tag.md#webviewtagfindinpage)结果有效时触发.
|
||||
|
||||
```javascript
|
||||
webview.addEventListener('found-in-page', function(e) {
|
||||
if (e.result.finalUpdate)
|
||||
webview.stopFindInPage("keepSelection");
|
||||
});
|
||||
webview.addEventListener('found-in-page', function (e) {
|
||||
if (e.result.finalUpdate) webview.stopFindInPage('keepSelection')
|
||||
})
|
||||
|
||||
const rquestId = webview.findInPage("test");
|
||||
const rquestId = webview.findInPage('test')
|
||||
```
|
||||
|
||||
### Event: 'new-window'
|
||||
|
@ -560,9 +559,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 +605,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 +623,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'
|
||||
|
@ -670,7 +669,7 @@ ipcRenderer.on('ping', function() {
|
|||
|
||||
### Event: 'did-change-theme-color'
|
||||
|
||||
在页面的主体色改变的时候触发.
|
||||
在页面的主体色改变的时候触发.
|
||||
在使用 meta 标签的时候这就很常见了:
|
||||
|
||||
```html
|
||||
|
@ -689,4 +688,4 @@ ipcRenderer.on('ping', function() {
|
|||
|
||||
在开发者工具获取焦点的时候触发.
|
||||
|
||||
[blink-feature-string]: https://code.google.com/p/chromium/codesearch#chromium/src/out/Debug/gen/blink/platform/RuntimeEnabledFeatures.cpp&sq=package:chromium&type=cs&l=527
|
||||
[blink-feature-string]: https://code.google.com/p/chromium/codesearch#chromium/src/out/Debug/gen/blink/platform/RuntimeEnabledFeatures.cpp&sq=package:chromium&type=cs&l=527
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue