📝 Update Korean docs as upstream

[ci skip]
This commit is contained in:
Plusb Preco 2016-05-10 16:27:14 +09:00
parent 12e62746b3
commit 6bad16377d
37 changed files with 314 additions and 287 deletions

View file

@ -5,8 +5,8 @@
밑의 예시는 마지막 윈도우가 종료되었을 때, 어플리케이션을 종료시키는 예시입니다:
```javascript
const app = require('electron').app;
app.on('window-all-closed', function() {
const { app } = require('electron');
app.on('window-all-closed', () => {
app.quit();
});
```
@ -244,7 +244,7 @@ Returns:
`callback(username, password)` 형태의 콜백을 호출하여 인증을 처리해야 합니다.
```javascript
app.on('login', function(event, webContents, request, authInfo, callback) {
app.on('login', (event, webContents, request, authInfo, callback) => {
event.preventDefault();
callback('username', 'secret');
})
@ -486,9 +486,9 @@ OS X에선 사용자가 Finder에서 어플리케이션의 두 번째 인스턴
인스턴스의 윈도우를 활성화 시키는 예시입니다:
```javascript
var myWindow = null;
let myWindow = null;
var shouldQuit = app.makeSingleInstance(function(commandLine, workingDirectory) {
const shouldQuit = app.makeSingleInstance((commandLine, workingDirectory) => {
// 어플리케이션을 중복 실행했습니다. 주 어플리케이션 인스턴스를 활성화 합니다.
if (myWindow) {
if (myWindow.isMinimized()) myWindow.restore();
@ -503,7 +503,7 @@ if (shouldQuit) {
}
// 윈도우를 생성하고 각종 리소스를 로드하고 작업합니다.
app.on('ready', function() {
app.on('ready', () => {
});
```

View file

@ -6,13 +6,13 @@
```javascript
// 메인 프로세스에서
const BrowserWindow = require('electron').BrowserWindow;
const { BrowserWindow } = require('electron');
// 또는 렌더러 프로세스에서
const BrowserWindow = require('electron').remote.BrowserWindow;
const { BrowserWindow } = require('electron').remote;
var win = new BrowserWindow({ width: 800, height: 600, show: false });
win.on('closed', function() {
let win = new BrowserWindow({ width: 800, height: 600, show: false });
win.on('closed', () => {
win = null;
});
@ -318,7 +318,7 @@ Returns:
e.g. `APPCOMMAND_BROWSER_BACKWARD``browser-backward`와 같이 반환됩니다.
```javascript
someWindow.on('app-command', function(e, cmd) {
someWindow.on('app-command', (e, cmd) => {
// 마우스의 뒤로가기 버튼을 눌렀을 때 뒤로가기 탐색을 실행합니다
if (cmd === 'browser-backward' && someWindow.webContents.canGoBack()) {
someWindow.webContents.goBack();

View file

@ -7,11 +7,11 @@
명령줄 옵션을 추가로 지정할 수 있습니다:
```javascript
const app = require('electron').app;
const { app } = require('electron');
app.commandLine.appendSwitch('remote-debugging-port', '8315');
app.commandLine.appendSwitch('host-rules', 'MAP * 127.0.0.1');
app.on('ready', function() {
app.on('ready', () => {
// Your code here
});
```

View file

@ -2,8 +2,10 @@
> 시스템 클립보드에 복사와 붙여넣기를 수행합니다.
다음 예시는 클립보드에 문자열을 쓰는 방법을 보여줍니다:
```javascript
const clipboard = require('electron').clipboard;
const { clipboard } = require('electron');
clipboard.writeText('Example String');
```

View file

@ -7,7 +7,7 @@
`chrome://tracing/` 페이지를 열고 생성된 파일을 로드하면 결과를 볼 수 있습니다.
```javascript
const contentTracing = require('electron').contentTracing;
const { contentTracing } = require('electron');
const options = {
categoryFilter: '*',
@ -17,8 +17,8 @@ const options = {
contentTracing.startRecording(options, function() {
console.log('Tracing started');
setTimeout(function() {
contentTracing.stopRecording('', function(path) {
setTimeout(() => {
contentTracing.stopRecording('', (path) => {
console.log('Tracing data recorded to ' + path);
});
}, 5000);

View file

@ -5,7 +5,7 @@
다음 예시는 윈격 서버에 어플리케이션 크래시 정보를 자동으로 보고하는 예시입니다:
```javascript
const crashReporter = require('electron').crashReporter;
const { crashReporter } = require('electron');
crashReporter.start({
productName: 'YourName',

View file

@ -5,9 +5,9 @@
```javascript
// 렌더러 프로세스 내부
var desktopCapturer = require('electron').desktopCapturer;
const { desktopCapturer } = require('electron');
desktopCapturer.getSources({types: ['window', 'screen']}, function(error, sources) {
desktopCapturer.getSources({types: ['window', 'screen']}, (error, sources) => {
if (error) throw error;
for (var i = 0; i < sources.length; ++i) {
if (sources[i].name == "Electron") {

View file

@ -6,7 +6,7 @@
```javascript
var win = ...; // 대화 상자를 사용할 BrowserWindow 객체
const dialog = require('electron').dialog;
const { dialog } = require('electron');
console.log(dialog.showOpenDialog({ properties: [ 'openFile', 'openDirectory', 'multiSelections' ]}));
```
@ -14,7 +14,7 @@ console.log(dialog.showOpenDialog({ properties: [ 'openFile', 'openDirectory', '
객체를 사용하고 싶다면, `remote`를 통해 접근하는 방법을 고려해야 합니다:
```javascript
const dialog = require('electron').remote.dialog;
const { dialog } = require('electron').remote;
```
## Methods

View file

@ -8,17 +8,17 @@
```javascript
// 메인 프로세스
win.webContents.session.on('will-download', function(event, item, webContents) {
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() {
item.on('updated', () => {
console.log('Received bytes: ' + item.getReceivedBytes());
});
item.on('done', function(e, state) {
if (state == "completed") {
item.on('done', (e, state) => {
if (state === "completed") {
console.log("Download successfully");
} else {
console.log("Download is cancelled or interrupted that can't be resumed");

View file

@ -14,16 +14,16 @@ API를 사용하여 작업할 때 선택된 파일의 경로를 알 수 있도
</div>
<script>
var holder = document.getElementById('holder');
holder.ondragover = function () {
const holder = document.getElementById('holder');
holder.ondragover = () => {
return false;
};
holder.ondragleave = holder.ondragend = function () {
holder.ondragleave = holder.ondragend = () => {
return false;
};
holder.ondrop = function (e) {
holder.ondrop = (e) => {
e.preventDefault();
var file = e.dataTransfer.files[0];
const file = e.dataTransfer.files[0];
console.log('File you dragged here is', file.path);
return false;
};

View file

@ -13,8 +13,8 @@ Frameless Window를 만드려면 [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');
let win = new BrowserWindow({ width: 800, height: 600, frame: false });
```
### 최신 OS X에서 사용할 수 있는 대안
@ -25,7 +25,7 @@ OS X 10.10 Yosemite 이후의 최신 버전부터는 테두리가 없는 창을
("흔히 신호등으로 알고 있는")의 기능과 창 크기를 그대로 유지할 수 있습니다:
```javascript
var win = new BrowserWindow({ 'titleBarStyle': 'hidden' });
let win = new BrowserWindow({ 'titleBarStyle': 'hidden' });
```
## 투명한 창 만들기
@ -34,7 +34,7 @@ Frameless Window 창의 배경을 투명하게 만들고 싶다면 `transparent`
바꿔주기만 하면됩니다:
```javascript
var win = new BrowserWindow({ transparent: true, frame: false });
let win = new BrowserWindow({ transparent: true, frame: false });
```
### API의 한계

View file

@ -12,12 +12,11 @@
```javascript
const electron = require('electron');
const app = electron.app;
const globalShortcut = electron.globalShortcut;
const { app, globalShortcut } = electron;
app.on('ready', function() {
app.on('ready', () => {
// 'CommandOrControl+X' 단축키를 리스너에 등록합니다.
var ret = globalShortcut.register('CommandOrControl+X', function() {
const ret = globalShortcut.register('CommandOrControl+X', () => {
console.log('CommandOrControl+X is pressed');
});
@ -29,7 +28,7 @@ app.on('ready', function() {
console.log(globalShortcut.isRegistered('CommandOrControl+X'));
});
app.on('will-quit', function() {
app.on('will-quit', () => {
// 단축키의 등록을 해제합니다.
globalShortcut.unregister('CommandOrControl+X');

View file

@ -20,13 +20,13 @@
```javascript
// 메인 프로세스
const ipcMain = require('electron').ipcMain;
ipcMain.on('asynchronous-message', function(event, arg) {
const { ipcMain } = require('electron');
ipcMain.on('asynchronous-message', (event, arg) => {
console.log(arg); // "ping" 출력
event.sender.send('asynchronous-reply', 'pong');
});
ipcMain.on('synchronous-message', function(event, arg) {
ipcMain.on('synchronous-message', (event, arg) => {
console.log(arg); // "ping" 출력
event.returnValue = 'pong';
});
@ -34,10 +34,10 @@ ipcMain.on('synchronous-message', function(event, arg) {
```javascript
// 렌더러 프로세스 (웹 페이지)
const ipcRenderer = require('electron').ipcRenderer;
const { ipcRenderer } = require('electron');
console.log(ipc.sendSync('synchronous-message', 'ping')); // "pong" 출력
ipcRenderer.on('asynchronous-reply', function(arg) {
ipcRenderer.on('asynchronous-reply', (arg) => {
console.log(arg); // "pong" 출력
});
ipcRenderer.send('asynchronous-message', 'ping');

View file

@ -14,16 +14,14 @@
```html
<!-- index.html -->
<script>
const remote = require('electron').remote;
const Menu = remote.Menu;
const MenuItem = remote.MenuItem;
const { Menu, MenuItem } = require('electron').remote;
var menu = new Menu();
menu.append(new MenuItem({ label: 'MenuItem1', click: function() { console.log('item 1 clicked'); } }));
const menu = new Menu();
menu.append(new MenuItem({ label: 'MenuItem1', click: () => { console.log('item 1 clicked'); } }));
menu.append(new MenuItem({ type: 'separator' }));
menu.append(new MenuItem({ label: 'MenuItem2', type: 'checkbox', checked: true }));
window.addEventListener('contextmenu', function (e) {
window.addEventListener('contextmenu', (e) => {
e.preventDefault();
menu.popup(remote.getCurrentWindow());
}, false);
@ -34,7 +32,7 @@ window.addEventListener('contextmenu', function (e) {
어플리케이션 메뉴를 만듭니다:
```javascript
var template = [
const template = [
{
label: 'Edit',
submenu: [
@ -79,33 +77,32 @@ var template = [
{
label: 'Reload',
accelerator: 'CmdOrCtrl+R',
click: function(item, focusedWindow) {
if (focusedWindow)
focusedWindow.reload();
click: (item, focusedWindow) => {
if (focusedWindow) focusedWindow.reload();
}
},
{
label: 'Toggle Full Screen',
accelerator: (function() {
if (process.platform == 'darwin')
accelerator: (() => {
if (process.platform === 'darwin')
return 'Ctrl+Command+F';
else
return 'F11';
})(),
click: function(item, focusedWindow) {
click: (item, focusedWindow) => {
if (focusedWindow)
focusedWindow.setFullScreen(!focusedWindow.isFullScreen());
}
},
{
label: 'Toggle Developer Tools',
accelerator: (function() {
accelerator: (() => {
if (process.platform == 'darwin')
return 'Alt+Command+I';
else
return 'Ctrl+Shift+I';
})(),
click: function(item, focusedWindow) {
click: (item, focusedWindow) => {
if (focusedWindow)
focusedWindow.webContents.toggleDevTools();
}
@ -134,14 +131,14 @@ var template = [
submenu: [
{
label: 'Learn More',
click: function() { require('electron').shell.openExternal('http://electron.atom.io') }
click: () => { require('electron').shell.openExternal('http://electron.atom.io') }
},
]
},
];
if (process.platform == 'darwin') {
var name = require('electron').remote.app.getName();
if (process.platform === 'darwin') {
const name = require('electron').remote.app.getName();
template.unshift({
label: name,
submenu: [
@ -180,7 +177,7 @@ if (process.platform == 'darwin') {
{
label: 'Quit',
accelerator: 'Command+Q',
click: function() { app.quit(); }
click: () => { app.quit(); }
},
]
});
@ -196,7 +193,7 @@ if (process.platform == 'darwin') {
);
}
var menu = Menu.buildFromTemplate(template);
const menu = Menu.buildFromTemplate(template);
Menu.setApplicationMenu(menu);
```

View file

@ -9,15 +9,15 @@ Electron은 파일 경로 또는 `nativeImage` 인스턴스를 통해 이미지
전달하여 이미지를 사용할 수 있습니다:
```javascript
var appIcon = new Tray('/Users/somebody/images/icon.png');
var window = new BrowserWindow({icon: '/Users/somebody/images/window.png'});
const appIcon = new Tray('/Users/somebody/images/icon.png');
let window = new BrowserWindow({icon: '/Users/somebody/images/window.png'});
```
이 예시는 클립보드로부터 가져온 `nativeImage`로 트레이 메뉴를 생성합니다:
```javascript
var image = clipboard.readImage();
var appIcon = new Tray(image);
const image = clipboard.readImage();
const appIcon = new Tray(image);
```
## 지원하는 포맷

View file

@ -10,8 +10,8 @@
```javascript
var app = require('app');
app.on('ready', function() {
require('electron').powerMonitor.on('suspend', function() {
app.on('ready', () => {
require('electron').powerMonitor.on('suspend', () => {
console.log('절전모드로 진입합니다!');
});
});

View file

@ -5,9 +5,9 @@
예시:
```javascript
const powerSaveBlocker = require('electron').powerSaveBlocker;
const { powerSaveBlocker } = require('electron');
var id = powerSaveBlocker.start('prevent-display-sleep');
const id = powerSaveBlocker.start('prevent-display-sleep');
console.log(powerSaveBlocker.isStarted(id));
powerSaveBlocker.stop(id);

View file

@ -29,8 +29,8 @@ Electron 내부 초기화 스크립트의 로드가 완료되고, 웹 페이지
```javascript
// preload.js
var _setImmediate = setImmediate;
var _clearImmediate = clearImmediate;
const _setImmediate = setImmediate;
const _clearImmediate = clearImmediate;
process.once('loaded', function() {
global.setImmediate = _setImmediate;
global.clearImmediate = _clearImmediate;

View file

@ -5,19 +5,18 @@
다음 예시는 `file://` 프로토콜과 비슷한 일을 하는 커스텀 프로토콜을 설정합니다:
```javascript
const electron = require('electron');
const { app, protocol } = electron;
const path = require('path');
const {app, protocol} = require('electron')
const path = require('path')
app.on('ready', function () {
protocol.registerFileProtocol('atom', function (request, callback) {
var url = request.url.substr(7);
callback({path: path.normalize(__dirname + '/' + url)});
const url = request.url.substr(7)
callback({path: path.normalize(__dirname + '/' + url)})
}, function (error) {
if (error)
console.error('Failed to register protocol')
});
});
})
})
```
**참고:** 모든 메서드는 따로 표기하지 않는 한 `app` 모듈의 `ready` 이벤트가 발생한
@ -31,10 +30,33 @@ app.on('ready', function() {
* `schemes` Array - 표준 스킴으로 등록할 커스텀 스킴 리스트
표준 `scheme`의 형식은 RFC 3986 [일반 URI 구문](https://tools.ietf.org/html/rfc3986#section-3)
표준을 따릅니다. 이 형식은 `file:`, `filesystem:`, `http` 등을 포함합니다. 스킴을
표준을 따라 등록하면, 스킴이 제공될 때 상대, 절대 경로의 리소스를 올바르게 취할 수
있습니다.
표준 스킴의 형식은 RFC 3986 [일반 URI 문법](https://tools.ietf.org/html/rfc3986#section-3)
표준을 따릅니다. 예를 들어 `http``https` 같은 표준 스킴과 `file`과 같은 표준이
아닌 스킴이 있습니다.
표준 스킴으로 등록하면, 상대, 절대 경로의 리소스를 올바르게 취할 수 있습니다. 다른
경우엔 스킴이 상대 경로 URL에 대한 분석 기능이 제외된 `file` 프로토콜과 같이
작동합니다.
예를 들어 다음과 같은 페이지에서 표준 스킴 등록 절차 없이 커스텀 프로토콜을 사용하여
이미지를 로드하려 했을 때, 표준 스킴으로 등록되지 않은 상대 경로 URL을 인식하지 못하고
로드에 실패하게 됩니다:
```html
<body>
<img src='test.png'>
</body>
```
따라서 커스텀 프로토콜을 등록하여 `http` 프로토콜을 덮어 쓰려면, 표준 스킴으로
등록해야만 합니다:
```javascript
protocol.registerStandardSchemes(['atom'])
app.on('ready', function () {
protocol.registerHttpProtocol('atom', ...)
})
```
**참고:** 이 메서드는 `app` 모듈의 `ready` 이벤트가 발생하기 이전에만 사용할 수
있습니다.
@ -94,9 +116,9 @@ The `uploadData` is an array of `data` objects:
예시:
```javascript
protocol.registerBufferProtocol('atom', function(request, callback) {
protocol.registerBufferProtocol('atom', (request, callback) => {
callback({mimeType: 'text/html', data: new Buffer('<h5>Response</h5>')});
}, function (error) {
}, (error) => {
if (error)
console.error('Failed to register protocol')
});

View file

@ -14,8 +14,7 @@ inter-process 통신을 하지 않고도 간단한 API를 통해 직접 메인
다음 예시는 렌더러 프로세스에서 브라우저 창을 만드는 예시입니다:
```javascript
const remote = require('electron').remote;
const BrowserWindow = remote.BrowserWindow;
const { BrowserWindow } = require('electron').remote;
var win = new BrowserWindow({ width: 800, height: 600 });
win.loadURL('https://github.com');
@ -57,7 +56,7 @@ Remote 객체가 GC 되려면 대응하는 메인 프로세스 내부 객체의
받을 수 있습니다. 하지만 이 작업은 반드시 주의를 기울여 사용해야 합니다.
첫째, 데드락을 피하기 위해 메인 프로세스로 전달된 콜백들은 비동기로 호출됩니다. 이러한
이유로 메인 프로세스로 전달된 콜백들의 반환 값을 내부 함수에서 언제나 정상적으로 받을
이유로 메인 프로세스에 전달된 콜백의 반환 값을 내부 함수에서 언제나 정상적으로 받을
것이라고 예측해선 안됩니다.
예를 들어 메인 프로세스에서 `Array.map` 같은 메서드를 사용할 때 렌더러 프로세스에서
@ -65,54 +64,50 @@ Remote 객체가 GC 되려면 대응하는 메인 프로세스 내부 객체의
```javascript
// mapNumbers.js 메인 프로세스
exports.withRendererCallback = function(mapper) {
exports.withRendererCallback = (mapper) => {
return [1,2,3].map(mapper);
}
exports.withLocalCallback = function() {
return exports.mapNumbers(function(x) {
return x + 1;
});
exports.withLocalCallback = () => {
return exports.mapNumbers(x => x + 1);
}
```
```javascript
// 렌더러 프로세스
var mapNumbers = require("remote").require("./mapNumbers");
const mapNumbers = require("remote").require("./mapNumbers");
var withRendererCb = mapNumbers.withRendererCallback(function(x) {
return x + 1;
})
const withRendererCb = mapNumbers.withRendererCallback(x => x + 1);
var withLocalCb = mapNumbers.withLocalCallback()
const withLocalCb = mapNumbers.withLocalCallback()
console.log(withRendererCb, withLocalCb) // [true, true, true], [2, 3, 4]
```
보다시피 렌더러 콜백의 동기 반환 값은 예상되지 않은 처리입니다.
그리고 메인 프로세스에서 처리한 함수의 반환 값과 일치하지 않습니다.
보다시피 동기적인 렌더러 콜백 함수의 반환 값은 예상되지 않은 값입니다. 그리고 메인
프로세스에서 처리한 함수의 반환 값과 일치하지 않습니다.
둘째, 콜백들은 메인 프로세스로 전달, 호출된 이후에도 자동으로 함수의 참조가 릴리즈 되지
않습니다. 함수 참조는 메인 프로세스에서 GC가 일어나기 전까지 계속 프로세스에 남아있게
됩니다.
다음 코드를 보면 느낌이 올 것입니다. 이 예시는 remote 객체에 `close` 이벤트 콜백을
설치합니다:
등록합니다:
```javascript
var remote = require('remote');
const remote = require('remote');
remote.getCurrentWindow().on('close', function() {
remote.getCurrentWindow().on('close', () => {
// blabla...
});
```
하지만 이 코드 처럼 이벤트를 명시적으로 제거하지 않는 이상 콜백 함수의 참조가 계속해서
메인 프로세스에 남아있게 됩니다. 만약 명시적으로 콜백을 제거하지 않으면 매 번 창을
새로고침 할 때마다 콜백을 새로 설치합니다. 게다가 이전 콜백이 제거되지 않고 계속해서
쌓이면서 메모리 누수가 발생합니다.
하지만 이 코드와 같이 등록된 이벤트는 명시적으로 제거하지 않는 이상 콜백 함수의 참조가
계속해서 메인 프로세스에 남아있게 됩니다. 만약 명시적으로 콜백을 제거하지 않으면 매 번
창을 새로고침 할 때마다 콜백을 새로 설치합니다. 게다가 이전 콜백이 제거되지 않고
계속해서 쌓이면서 메모리 누수가 발생합니다.
설상가상으로 이전에 설치된 콜백의 콘텍스트가 릴리즈 되고 난 후(예: 페이지 새로고침)
설상가상으로 이전에 등록된 콜백의 콘텍스트가 릴리즈 되고 난 후 (e.g. 페이지 새로고침)
`close` 이벤트가 발생하면 예외가 발생하고 메인 프로세스가 작동 중지됩니다.
이러한 문제를 피하려면 렌더러 프로세스에서 메인 프로세스로 넘긴 함수의 참조를 사용 후

View file

@ -16,31 +16,28 @@
```javascript
const electron = require('electron');
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
const { app, BrowserWindow } = electron;
var mainWindow;
let 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', () => {
const { width, height } = electron.screen.getPrimaryDisplay().workAreaSize;
mainWindow = new BrowserWindow({ width, height });
});
```
다음 예시는 확장 디스플레이에 윈도우를 생성합니다:
```javascript
var app = require('app');
var BrowserWindow = require('browser-window');
const electron = require('electron');
const { screen: electronScreen, app, BrowserWindow } = electron;
var mainWindow;
let mainWindow;
app.on('ready', function() {
var electronScreen = require('screen');
var displays = electronScreen.getAllDisplays();
var externalDisplay = null;
for (var i in displays) {
app.on('ready', () => {
let displays = electronScreen.getAllDisplays();
let externalDisplay = null;
for (let i in displays) {
if (displays[i].bounds.x != 0 || displays[i].bounds.y != 0) {
externalDisplay = displays[i];
break;

View file

@ -8,12 +8,12 @@
[`webContents`](web-contents.md)에서 `session` 속성으로 접근할 수도 있습니다.
```javascript
var BrowserWindow = require('browser-window');
const { BrowserWindow } = require('electron');
var win = new BrowserWindow({ width: 800, height: 600 });
let win = new BrowserWindow({ width: 800, height: 600 });
win.loadURL("http://github.com");
var ses = win.webContents.session;
const ses = win.webContents.session;
```
## Methods
@ -46,7 +46,7 @@ var ses = win.webContents.session;
```javascript
const session = require('electron').session;
var ses = session.fromPartition('persist:name');
const ses = session.fromPartition('persist:name');
```
### Instance Events
@ -65,9 +65,9 @@ Electron의 `webContents`에서 `item`을 다운로드할 때 발생하는 이
틱부터 `item`을 사용할 수 없게 됩니다.
```javascript
session.defaultSession.on('will-download', function(event, item, webContents) {
session.defaultSession.on('will-download', (event, item, webContents) => {
event.preventDefault();
require('request')(item.getURL(), function(data) {
require('request')(item.getURL(), (data) => {
require('fs').writeFileSync('/somewhere', data);
});
});
@ -84,19 +84,19 @@ session.defaultSession.on('will-download', function(event, item, webContents) {
```javascript
// 모든 쿠키를 요청합니다.
session.defaultSession.cookies.get({}, function(error, cookies) {
session.defaultSession.cookies.get({}, (error, cookies) => {
console.log(cookies);
});
// url에 관련된 쿠키를 모두 가져옵니다.
session.defaultSession.cookies.get({ url : "http://www.github.com" }, function(error, cookies) {
session.defaultSession.cookies.get({ url : "http://www.github.com" }, (error, cookies) => {
console.log(cookies);
});
// 지정한 쿠키 데이터를 설정합니다.
// 동일한 쿠키가 있으면 해당 쿠키를 덮어씁니다.
var cookie = { url : "http://www.github.com", name : "dummy_name", value : "dummy" };
session.defaultSession.cookies.set(cookie, function(error) {
const cookie = { url : "http://www.github.com", name : "dummy_name", value : "dummy" };
session.defaultSession.cookies.set(cookie, (error) => {
if (error)
console.error(error);
});
@ -284,8 +284,8 @@ window.webContents.session.enableNetworkEmulation({offline: true});
`setCertificateVerifyProc(null)`을 호출하면 기본 검증 프로세스로 되돌립니다.
```javascript
myWindow.webContents.session.setCertificateVerifyProc(function(hostname, cert, callback) {
if (hostname == 'github.com')
myWindow.webContents.session.setCertificateVerifyProc((hostname, cert, callback) => {
if (hostname === 'github.com')
callback(true);
else
callback(false);
@ -304,9 +304,9 @@ myWindow.webContents.session.setCertificateVerifyProc(function(hostname, cert, c
호출하면 권한 제공을 거부합니다.
```javascript
session.fromPartition(partition).setPermissionRequestHandler(function(webContents, permission, callback) {
session.fromPartition(partition).setPermissionRequestHandler((webContents, permission, callback) => {
if (webContents.getURL() === host) {
if (permission == "notifications") {
if (permission === "notifications") {
callback(false); // 거부됨.
return;
}
@ -340,11 +340,11 @@ session.fromPartition(partition).setPermissionRequestHandler(function(webContent
```javascript
// 다음 url에 대한 User Agent를 조작합니다.
var filter = {
const filter = {
urls: ["https://*.github.com/*", "*://electron.github.io"]
};
session.defaultSession.webRequest.onBeforeSendHeaders(filter, function(details, callback) {
session.defaultSession.webRequest.onBeforeSendHeaders(filter, (details, callback) => {
details.requestHeaders['User-Agent'] = "MyAgent";
callback({cancel: false, requestHeaders: details.requestHeaders});
});

View file

@ -7,7 +7,8 @@
다음 예시는 설정된 URL을 유저의 기본 브라우저로 엽니다:
```javascript
const shell = require('electron').shell;
const { shell } = require('electron');
shell.openExternal('https://github.com');
```

View file

@ -18,13 +18,11 @@ node 모듈을 완벽하게 지원합니다. ([네이티브 모듈](../tutorial/
메인 프로세스 스크립트는 일반 Node.js 스크립트와 비슷합니다:
```javascript
const electron = require('electron');
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
const { app, BrowserWindow } = require('electron');
var window = null;
let window = null;
app.on('ready', function() {
app.on('ready', () => {
window = new BrowserWindow({width: 800, height: 600});
window.loadURL('https://github.com');
});
@ -38,7 +36,7 @@ app.on('ready', function() {
<html>
<body>
<script>
const remote = require('electron').remote;
const { remote } = require('electron');
console.log(remote.app.getVersion());
</script>
</body>
@ -50,15 +48,28 @@ app.on('ready', function() {
## 분리 할당
만약 CoffeeScript나 Babel을 사용하고 있다면, 빌트인 모듈을 사용할 때
[분리 할당][destructuring-assignment]을 통해 직관적으로 사용할 수 있습니다:
0.37 버전부터, [분리 할당][destructuring-assignment]을 통해 빌트인 모듈을 더
직관적으로 사용할 수 있습니다:
```javascript
const {app, BrowserWindow} = require('electron')
const { app, BrowserWindow } = require('electron');
```
아직 플레인 자바스크립트를 쓰고 있다면, Chrome이 ES6를 완전히 지원하기 전까지 기다려야
합니다.
모든 `electron` 모듈이 필요하다면, 먼저 require한 후 각 독립적인 모듈을
`electron`에서 분리 할당함으로써 모듈을 사용할 수 있습니다.
```javascript
const electron = require('electron');
const { app, BrowserWindow } = electron;
```
위 코드는 다음과 같습니다:
```javascript
const electron = require('electron');
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
```
## 이전 스타일의 빌트인 모듈 비활성화

View file

@ -3,15 +3,12 @@
> 아이콘과 컨텍스트 메뉴를 시스템 알림 영역에 추가합니다.
```javascript
const electron = require('electron');
const app = electron.app;
const Menu = electron.Menu;
const Tray = electron.Tray;
const { app, Menu, Tray } = require('electron');
var appIcon = null;
app.on('ready', function(){
let appIcon = null;
app.on('ready', () => {
appIcon = new Tray('/path/to/my/icon'); // 현재 어플리케이션 디렉터리를 기준으로 하려면 `__dirname + '/images/tray.png'` 형식으로 입력해야 합니다.
var contextMenu = Menu.buildFromTemplate([
const contextMenu = Menu.buildFromTemplate([
{ label: 'Item1', type: 'radio' },
{ label: 'Item2', type: 'radio' },
{ label: 'Item3', type: 'radio', checked: true },
@ -20,7 +17,6 @@ app.on('ready', function(){
appIcon.setToolTip('이것은 나의 어플리케이션 입니다!');
appIcon.setContextMenu(contextMenu);
});
```
__플랫폼별 한계:__

View file

@ -8,12 +8,12 @@
접근하는 예시입니다:
```javascript
const BrowserWindow = require('electron').BrowserWindow;
const { BrowserWindow } = require('electron');
var win = new BrowserWindow({width: 800, height: 1500});
let win = new BrowserWindow({width: 800, height: 1500});
win.loadURL("http://github.com");
var webContents = win.webContents;
let webContents = win.webContents;
```
## Events
@ -388,10 +388,10 @@ webContents.loadURL(url, options)
현재 웹 페이지의 URL을 반환합니다.
```javascript
var win = new BrowserWindow({width: 800, height: 600});
let win = new BrowserWindow({width: 800, height: 600});
win.loadURL("http://github.com");
var currentURL = win.webContents.getURL();
let currentURL = win.webContents.getURL();
```
### `webContents.getTitle()`
@ -654,22 +654,22 @@ Chromium의 미리보기 프린팅 커스텀 설정을 이용하여 윈도우의
```
```javascript
const BrowserWindow = require('electron').BrowserWindow;
const { BrowserWindow } = require('electron');
const fs = require('fs');
var win = new BrowserWindow({width: 800, height: 600});
win.loadURL("http://github.com");
let win = new BrowserWindow({width: 800, height: 600});
win.loadURL('http://github.com');
win.webContents.on("did-finish-load", function() {
// Use default printing options
win.webContents.printToPDF({}, function(error, data) {
win.webContents.on('did-finish-load', () => {
// 기본 프린트 옵션을 사용합니다
win.webContents.printToPDF({}, (error, data) => {
if (error) throw error;
fs.writeFile("/tmp/print.pdf", data, function(error) {
fs.writeFile('/tmp/print.pdf', data, (error) => {
if (error)
throw error;
console.log("Write PDF successfully.");
})
})
console.log('Write PDF successfully.');
});
});
});
```
@ -745,13 +745,14 @@ mainWindow.webContents.on('devtools-opened', function() {
메인 프로세스에서 렌더러 프로세스로 메시지를 보내는 예시 입니다:
```javascript
// In the main process.
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!');
// 메인 프로세스에서.
let mainWindow = null;
app.on('ready', () => {
mainWindow = new BrowserWindow({width: 800, height: 600});
mainWindow.loadURL(`file://${__dirname}/index.html`);
mainWindow.webContents.on('did-finish-load', () => {
mainWindow.webContents.send('ping', 'whoooooooh!');
});
});
```
@ -761,8 +762,8 @@ app.on('ready', function() {
<html>
<body>
<script>
require('electron').ipcRenderer.on('ping', function(event, message) {
console.log(message); // Prints "whoooooooh!"
require('electron').ipcRenderer.on('ping', (event, message) => {
console.log(message); // "whoooooooh!" 출력
});
</script>
</body>
@ -878,8 +879,8 @@ Input `event`를 웹 페이지로 전송합니다.
```javascript
win.loadURL('https://github.com');
win.webContents.on('did-finish-load', function() {
win.webContents.savePage('/tmp/test.html', 'HTMLComplete', function(error) {
win.webContents.on('did-finish-load', () => {
win.webContents.savePage('/tmp/test.html', 'HTMLComplete', (error) => {
if (!error)
console.log("Save page successfully");
});
@ -916,13 +917,13 @@ try {
console.log("Debugger attach failed : ", err);
};
win.webContents.debugger.on('detach', function(event, reason) {
win.webContents.debugger.on('detach', (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.on('message', (event, method, params) => {
if (method === "Network.requestWillBeSent") {
if (params.request.url === "https://www.github.com")
win.webContents.debugger.detach();
}
})

View file

@ -5,7 +5,7 @@
다음 예시는 현재 페이지를 200% 줌 합니다:
```javascript
var webFrame = require('electron').webFrame;
const { webFrame } = require('electron');
webFrame.setZoomFactor(2);
```

View file

@ -29,18 +29,20 @@
```html
<script>
onload = function() {
var webview = document.getElementById("foo");
var indicator = document.querySelector(".indicator");
onload = () => {
const webview = document.getElementById('foo');
const indicator = document.querySelector('.indicator');
var loadstart = function() {
indicator.innerText = "loading...";
const loadstart = () => {
indicator.innerText = 'loading...';
}
var loadstop = function() {
indicator.innerText = "";
const loadstop = () => {
indicator.innerText = '';
}
webview.addEventListener("did-start-loading", loadstart);
webview.addEventListener("did-stop-loading", loadstop);
webview.addEventListener('did-start-loading', loadstart);
webview.addEventListener('did-stop-loading', loadstop);
}
</script>
```
@ -205,7 +207,7 @@ API를 사용할 수 있습니다. 이를 지정하면 내부에서 로우레벨
**예시**
```javascript
webview.addEventListener("dom-ready", function() {
webview.addEventListener("dom-ready", () => {
webview.openDevTools();
});
```
@ -631,10 +633,12 @@ Returns:
다음 예시 코드는 새 URL을 시스템의 기본 브라우저로 여는 코드입니다.
```javascript
webview.addEventListener('new-window', function(e) {
var protocol = require('url').parse(e.url).protocol;
const { shell } = require('electron');
webview.addEventListener('new-window', (e) => {
const protocol = require('url').parse(e.url).protocol;
if (protocol === 'http:' || protocol === 'https:') {
require('electron').shell.openExternal(e.url);
shell.openExternal(e.url);
}
});
```
@ -687,7 +691,7 @@ Returns:
이동시키는 예시입니다.
```javascript
webview.addEventListener('close', function() {
webview.addEventListener('close', () => {
webview.src = 'about:blank';
});
```
@ -706,7 +710,7 @@ Returns:
```javascript
// In embedder page.
webview.addEventListener('ipc-message', function(event) {
webview.addEventListener('ipc-message', (event) => {
console.log(event.channel);
// Prints "pong"
});
@ -715,8 +719,8 @@ webview.send('ping');
```javascript
// In guest page.
var ipcRenderer = require('electron').ipcRenderer;
ipcRenderer.on('ping', function() {
var { ipcRenderer } = require('electron');
ipcRenderer.on('ping', () => {
ipcRenderer.sendToHost('pong');
});
```

View file

@ -62,16 +62,16 @@ console.log(require('remote').getGlobal('sharedObject').someProperty);
만약 빠르게 고치고 싶다면, 다음과 같이 변수를 전역 변수로 만드는 방법이 있습니다:
```javascript
app.on('ready', function() {
var tray = new Tray('/path/to/icon.png');
app.on('ready', () => {
const tray = new Tray('/path/to/icon.png');
})
```
를 이렇게:
```javascript
var tray = null;
app.on('ready', function() {
let tray = null;
app.on('ready', () => {
tray = new Tray('/path/to/icon.png');
})
```
@ -86,7 +86,7 @@ Node.js가 Electron에 합쳐졌기 때문에, DOM에 `module`, `exports`, `requ
```javascript
// 메인 프로세스에서.
var mainWindow = new BrowserWindow({
let mainWindow = new BrowserWindow({
webPreferences: {
nodeIntegration: false
}

View file

@ -70,8 +70,8 @@ require('/path/to/example.asar/dir/module.js');
`BrowserWindow` 클래스를 이용해 원하는 웹 페이지도 표시할 수 있습니다:
```javascript
const BrowserWindow = require('electron').BrowserWindow;
var win = new BrowserWindow({width: 800, height: 600});
const { BrowserWindow } = require('electron');
let win = new BrowserWindow({width: 800, height: 600});
win.loadURL('file:///path/to/example.asar/static/index.html');
```
@ -85,7 +85,7 @@ win.loadURL('file:///path/to/example.asar/static/index.html');
```html
<script>
var $ = require('./jquery.min.js');
$.get('file:///path/to/example.asar/file.txt', function(data) {
$.get('file:///path/to/example.asar/file.txt', (data) => {
console.log(data);
});
</script>
@ -99,7 +99,7 @@ $.get('file:///path/to/example.asar/file.txt', function(data) {
읽어들입니다:
```javascript
var originalFs = require('original-fs');
const originalFs = require('original-fs');
originalFs.readFileSync('/path/to/example.asar');
```

View file

@ -17,7 +17,7 @@ Windows, Linux, OS X 운영체제 모두 기본적으로 어플리케이션에
**참고:** 이 API는 HTML5 API이기 때문에 렌더러 프로세스에서만 사용할 수 있습니다.
```javascript
var myNotification = new Notification('Title', {
let myNotification = new Notification('Title', {
body: 'Lorem Ipsum Dolor Sit Amet'
});
@ -114,8 +114,8 @@ const electron = require('electron');
const app = electron.app;
const Menu = electron.Menu;
var dockMenu = Menu.buildFromTemplate([
{ label: 'New Window', click: function() { console.log('New Window'); } },
const dockMenu = Menu.buildFromTemplate([
{ label: 'New Window', click: () => { console.log('New Window'); } },
{ label: 'New Window with Settings', submenu: [
{ label: 'Basic' },
{ label: 'Pro'}
@ -203,24 +203,25 @@ __Windows Media Player의 미리보기 툴바:__
미리보기 툴바를 설정할 수 있습니다:
```javascript
const BrowserWindow = require('electron').BrowserWindow;
const { BrowserWindow } = require('electron');
const path = require('path');
var win = new BrowserWindow({
let win = new BrowserWindow({
width: 800,
height: 600
});
win.setThumbarButtons([
{
tooltip: "button1",
icon: path.join(__dirname, 'button1.png'),
click: function() { console.log("button2 clicked"); }
click: () => { console.log("button2 clicked"); }
},
{
tooltip: "button2",
icon: path.join(__dirname, 'button2.png'),
flags:['enabled', 'dismissonclick'],
click: function() { console.log("button2 clicked."); }
click: () => { console.log("button2 clicked."); }
}
]);
```
@ -259,7 +260,7 @@ __작업 표시줄 버튼의 프로그래스 바:__
있습니다:
```javascript
var window = new BrowserWindow({...});
let window = new BrowserWindow({...});
window.setProgressBar(0.5);
```
@ -286,7 +287,7 @@ __작업 표시줄 버튼 위의 오버레이:__
API를 사용할 수 있습니다:
```javascript
var window = new BrowserWindow({...});
let window = new BrowserWindow({...});
window.setOverlayIcon('path/to/overlay.png', 'Description for overlay');
```
@ -305,7 +306,7 @@ __대표 파일 팝업 메뉴:__
[BrowserWindow.setDocumentEdited][setdocumentedited]를 사용할 수 있습니다:
```javascript
var window = new BrowserWindow({...});
let window = new BrowserWindow({...});
window.setRepresentedFilename('/etc/passwd');
window.setDocumentEdited(true);
```

View file

@ -10,8 +10,9 @@ const electron = require('electron');
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
var onlineStatusWindow;
app.on('ready', function() {
let onlineStatusWindow;
app.on('ready', () => {
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false });
onlineStatusWindow.loadURL('file://' + __dirname + '/online-status.html');
});
@ -24,7 +25,7 @@ _online-status.html_
<html>
<body>
<script>
var alertOnlineStatus = function() {
const alertOnlineStatus = () => {
window.alert(navigator.onLine ? 'online' : 'offline');
};
@ -52,13 +53,14 @@ const app = electron.app;
const ipcMain = electron.ipcMain;
const BrowserWindow = electron.BrowserWindow;
var onlineStatusWindow;
app.on('ready', function() {
let onlineStatusWindow;
app.on('ready', () => {
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false });
onlineStatusWindow.loadURL('file://' + __dirname + '/online-status.html');
onlineStatusWindow.loadURL(`file://${__dirname}/online-status.html`);
});
ipcMain.on('online-status-changed', function(event, status) {
ipcMain.on('online-status-changed', (event, status) => {
console.log(status);
});
```
@ -70,8 +72,8 @@ _online-status.html_
<html>
<body>
<script>
const ipcRenderer = require('electron').ipcRenderer;
var updateOnlineStatus = function() {
const { ipcRenderer } = require('electron');
const updateOnlineStatus = () => {
ipcRenderer.send('online-status-changed', navigator.onLine ? 'online' : 'offline');
};

View file

@ -75,61 +75,60 @@ __알림__: 만약 `main` 필드가 `package.json`에 설정되어 있지 않으
다음과 같이 작성할 수 있습니다:
```javascript
const electron = require('electron')
const electron = require('electron');
// 어플리케이션 생명주기를 조작 하는 모듈.
const app = electron.app
const app = electron.app;
// 네이티브 브라우저 창을 만드는 모듈.
const BrowserWindow = electron.BrowserWindow
const BrowserWindow = electron.BrowserWindow;
// 윈도우 객체를 전역에 유지합니다. 만약 이렇게 하지 않으면
// 자바스크립트 GC가 일어날 때 창이 멋대로 닫혀버립니다.
let mainWindow
let mainWindow;
function createWindow () {
// 새로운 브라우저 창을 생성합니다.
mainWindow = new BrowserWindow({width: 800, height: 600})
mainWindow = new BrowserWindow({width: 800, height: 600});
// 그리고 현재 디렉터리의 index.html을 로드합니다.
mainWindow.loadURL('file://' + __dirname + '/index.html')
mainWindow.loadURL(`file://${__dirname}/index.html`);
// 개발자 도구를 엽니다.
mainWindow.webContents.openDevTools()
mainWindow.webContents.openDevTools();
// 창이 닫히면 호출됩니다.
mainWindow.on('closed', function () {
mainWindow.on('closed', () => {
// 윈도우 객체의 참조를 삭제합니다. 보통 멀티 윈도우 지원을 위해
// 윈도우 객체를 배열에 저장하는 경우가 있는데 이 경우
// 해당하는 모든 윈도우 객체의 참조를 삭제해 주어야 합니다.
mainWindow = null
})
mainWindow = null;
});
}
// 이 메서드는 Electron의 초기화가 끝나면 실행되며 브라우저
// 윈도우를 생성할 수 있습니다. 몇몇 API는 이 이벤트 이후에만
// 사용할 수 있습니다.
app.on('ready', createWindow)
app.on('ready', createWindow);
// 모든 창이 닫히면 어플리케이션 종료.
app.on('window-all-closed', function () {
app.on('window-all-closed', () => {
// OS X의 대부분의 어플리케이션은 유저가 Cmd + Q 커맨드로 확실하게
// 종료하기 전까지 메뉴바에 남아 계속 실행됩니다.
if (process.platform !== 'darwin') {
app.quit()
app.quit();
}
})
});
app.on('activate', function () {
app.on('activate', () => {
// OS X에선 보통 독 아이콘이 클릭되고 나서도
// 열린 윈도우가 없으면, 새로운 윈도우를 다시 만듭니다.
if (mainWindow === null) {
createWindow()
createWindow();
}
})
});
// 이 파일엔 제작할 어플리케이션에 특화된 메인 프로세스 코드를
// 포함할 수 있습니다. 또한 파일을 분리하여 require하는 방법으로
// 코드를 작성할 수도 있습니다.
```
마지막으로, 사용자에게 보여줄 `index.html` 웹 페이지의 예시입니다:

View file

@ -26,7 +26,7 @@ app.commandLine.appendSwitch('ppapi-flash-path', '/path/to/libpepflashplayer.so'
// 선택적인으로 플래시 플레이어의 버전을 설정합니다. 예시로는, v17.0.0.169
app.commandLine.appendSwitch('ppapi-flash-version', '17.0.0.169');
app.on('ready', function() {
app.on('ready', () => {
mainWindow = new BrowserWindow({
width: 800,
height: 600,
@ -34,7 +34,7 @@ app.on('ready', function() {
plugins: true
}
});
mainWindow.loadURL('file://' + __dirname + '/index.html');
mainWindow.loadURL(`file://${__dirname}/index.html`);
// 이외의 코드
});
```

View file

@ -42,7 +42,7 @@ $ npm install selenium-webdriver
```javascript
const webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder()
const driver = new webdriver.Builder()
// 작동하고 있는 크롬 드라이버의 포트 "9515"를 사용합니다.
.usingServer('http://localhost:9515')
.withCapabilities({
@ -57,8 +57,8 @@ var driver = new webdriver.Builder()
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) {
driver.wait(() => {
return driver.getTitle().then((title) => {
return title === 'webdriver - Google Search';
});
}, 1000);
@ -92,7 +92,7 @@ $ npm install webdriverio
### 3. 크롬 드라이버에 연결
```javascript
const webdriverio = require('webdriverio');
var options = {
let options = {
host: "localhost", // localhost에서 작동중인 크롬 드라이버 서버를 사용합니다.
port: 9515, // 연결할 크롬 드라이버 서버의 포트를 설정합니다.
desiredCapabilities: {
@ -104,14 +104,14 @@ var options = {
}
};
var client = webdriverio.remote(options);
let client = webdriverio.remote(options);
client
.init()
.url('http://google.com')
.setValue('#q', 'webdriverio')
.click('#btnG')
.getTitle().then(function(title) {
.getTitle().then((title) => {
console.log('Title was: ' + title);
})
.end();

View file

@ -59,8 +59,8 @@ app.commandLine.appendSwitch('widevine-cdm-path', '/path/to/widevinecdmadapter.p
// 플러그인의 버전은 크롬의 `chrome://plugins` 페이지에서 취득할 수 있습니다.
app.commandLine.appendSwitch('widevine-cdm-version', '1.4.8.866');
var mainWindow = null;
app.on('ready', function() {
let mainWindow = null;
app.on('ready', () => {
mainWindow = new BrowserWindow({
webPreferences: {
// `plugins`은 활성화되어야 합니다.