Update as upstream

* Update as upstream
* Fix typos
* Improve grammar
This commit is contained in:
Plusb Preco 2015-11-16 12:15:21 +09:00
parent ad776887da
commit e12e119381
32 changed files with 340 additions and 177 deletions

View file

@ -31,32 +31,32 @@
### 메인 프로세스에서 사용할 수 있는 모듈:
* [app](api/app.md)
* [auto-updater](api/auto-updater.md)
* [browser-window (0% 번역됨)](api/browser-window.md)
* [content-tracing](api/content-tracing.md)
* [autoUpdater](api/auto-updater.md)
* [BrowserWindow (0% 번역됨)](api/browser-window.md)
* [contentTracing](api/content-tracing.md)
* [dialog](api/dialog.md)
* [global-shortcut](api/global-shortcut.md)
* [ipc-main](api/ipc-main.md)
* [menu](api/menu.md)
* [menu-item](api/menu-item.md)
* [power-monitor](api/power-monitor.md)
* [power-save-blocker](api/power-save-blocker.md)
* [globalShortcut](api/global-shortcut.md)
* [ipcMain](api/ipc-main.md)
* [Menu](api/menu.md)
* [MenuItem](api/menu-item.md)
* [powerMonitor](api/power-monitor.md)
* [powerSaveBlocker](api/power-save-blocker.md)
* [protocol](api/protocol.md)
* [session](api/session.md)
* [web-contents (0% 번역됨)](api/web-contents.md)
* [tray](api/tray.md)
* [webContents (0% 번역됨)](api/web-contents.md)
* [Tray](api/tray.md)
### 랜더러 프로세스에서 사용할 수 있는 모듈 (웹 페이지):
* [ipc-renderer](api/ipc-renderer.md)
* [ipcRenderer](api/ipc-renderer.md)
* [remote](api/remote.md)
* [web-frame](api/web-frame.md)
* [webFrame](api/web-frame.md)
### 두 프로세스 모두 사용할 수 있는 모듈:
* [clipboard](api/clipboard.md)
* [crash-reporter](api/crash-reporter.md)
* [native-image](api/native-image.md)
* [crashReporter](api/crash-reporter.md)
* [nativeImage](api/native-image.md)
* [screen](api/screen.md)
* [shell](api/shell.md)

View file

@ -5,7 +5,7 @@
밑의 예제는 마지막 윈도우창가 종료되었을 때, 어플리케이션을 종료시키는 예제입니다:
```javascript
var app = require('app');
const app = require('electron').app;
app.on('window-all-closed', function() {
app.quit();
});
@ -240,6 +240,12 @@ GPU가 작동하던 중 크래시가 일어났을 때 발생하는 이벤트입
* `userDesktop` - 현재 사용자의 데스트탑 디렉터리.
* `exe` - 현재 실행중인 Electron 바이너리 파일.
* `module` - `libchromiumcontent` 라이브러리.
* `desktop` - 사용자의 데스크탑 디렉터리.
* `documents` - 사용자의 "내 문서" 디렉터리.
* `downloads` - 사용자의 다운로드 디렉터리.
* `music` - 사용자의 음악 디렉터리.
* `pictures` - 사용자의 사진 디렉터리.
* `videos` - 사용자의 동영상 디렉터리.
### `app.setPath(name, path)`

View file

@ -62,7 +62,7 @@ Returns:
* `releaseNotes` String
* `releaseName` String
* `releaseDate` Date
* `updateUrl` String
* `updateURL` String
업데이트의 다운로드가 완료되었을 때 발생하는 이벤트입니다.
@ -70,7 +70,7 @@ Returns:
`autoUpdater` 객체에서 사용할 수 있는 메서드입니다:
### `autoUpdater.setFeedUrl(url)`
### `autoUpdater.setFeedURL(url)`
* `url` String
@ -78,7 +78,7 @@ Returns:
### `autoUpdater.checkForUpdates()`
서버에 새로운 업데이트가 있는지 요청을 보내 확인합니다. API를 사용하기 전에 `setFeedUrl`를 호출해야 합니다.
서버에 새로운 업데이트가 있는지 요청을 보내 확인합니다. API를 사용하기 전에 `setFeedURL`를 호출해야 합니다.
### `autoUpdater.quitAndInstall()`

View file

@ -5,7 +5,7 @@
어플리케이션 내부에서 스위치들을 추가할 수 있습니다:
```javascript
var app = require('app');
const app = require('electron').app;
app.commandLine.appendSwitch('remote-debugging-port', '8315');
app.commandLine.appendSwitch('host-rules', 'MAP * 127.0.0.1');
@ -28,7 +28,16 @@ HTTP 요청 캐시를 비활성화 합니다.
## --remote-debugging-port=`port`
지정한 `port`에 HTTP기반의 리모트 디버거를 활성화 시킵니다. (개발자 콘솔)
지정한 `port`에 HTTP 기반의 리모트 디버거를 활성화 시킵니다. (개발자 콘솔)
## --js-flags=`flags`
JS 엔진에 지정한 플래그를 전달합니다.
`flags`를 메인 프로세스에서 활성화하고자 한다면, Electron이 시작되기 전에 스위치를 전달해야 합니다.
```bash
$ electron --js-flags="--harmony_proxies --harmony_collections" your-app
```
## --proxy-server=`address:port`

View file

@ -3,14 +3,13 @@
`clipboard` 모듈은 복사/붙여넣기 작업을 수행하는 방법을 제공합니다. 다음 예제는 클립보드에 문자열을 씁니다:
```javascript
var clipboard = require('clipboard');
const clipboard = require('electron').clipboard;
clipboard.writeText('Example String');
```
X Window 시스템에선 selection 클립보드도 존재합니다. 이를 사용하려면 인자 뒤에 `selection` 문자열을 같이 지정해주어야 합니다:
```javascript
var clipboard = require('clipboard');
clipboard.writeText('Example String', 'selection');
console.log(clipboard.readText('selection'));
```
@ -78,7 +77,6 @@ console.log(clipboard.readText('selection'));
클립보드가 지정한 `data`의 형식을 지원하는지 확인합니다.
```javascript
var clipboard = require('clipboard');
console.log(clipboard.has('<p>selection</p>'));
```
@ -98,7 +96,6 @@ console.log(clipboard.has('<p>selection</p>'));
* `type` String (optional)
```javascript
var clipboard = require('clipboard');
clipboard.write({text: 'test', html: "<b>test</b>"});
```

View file

@ -4,9 +4,14 @@
이 모듈은 웹 인터페이스를 포함하고 있지 않으며 크롬 브라우저에서 `chrome://tracing/` 페이지를 열어 생성된 파일을 로드하면 결과를 볼 수 있습니다.
```javascript
var contentTracing = require('content-tracing');
const contentTracing = require('electron').contentTracing;
contentTracing.startRecording('*', contentTracing.DEFAULT_OPTIONS, function() {
const options = {
categoryFilter: '*',
traceOptions: 'record-until-full,enable-sampling'
};
contentTracing.startRecording(options, function() {
console.log('Tracing started');
setTimeout(function() {

View file

@ -5,12 +5,12 @@
다음 예제는 윈격 서버에 어플리케이션 크래시 정보를 자동으로 보고하는 예제입니다:
```javascript
var crashReporter = require('crash-reporter');
const crashReporter = require('electron').crashReporter;
crashReporter.start({
productName: 'YourName',
companyName: 'YourCompany',
submitUrl: 'https://your-domain.com/url-to-submit',
submitURL: 'https://your-domain.com/url-to-submit',
autoSubmit: true
});
```
@ -25,7 +25,7 @@ crashReporter.start({
* `productName` String, 기본값: Electron
* `companyName` String, 기본값: GitHub, Inc
* `submitUrl` String, 기본값: http://54.249.141.255:1127/post
* `submitURL` String, 기본값: http://54.249.141.255:1127/post
* 크래시 리포트는 POST 방식으로 이 URL로 전송됩니다.
* `autoSubmit` Boolean, 기본값: true
* true로 지정할 경우 유저의 승인 없이 자동으로 오류를 보고합니다.
@ -52,7 +52,7 @@ crashReporter.start({
## crash-reporter 업로드 형식
Crash Reporter는 다음과 같은 데이터를 `submitUrl`에 `POST` 방식으로 전송합니다:
Crash Reporter는 다음과 같은 데이터를 `submitURL`에 `POST` 방식으로 전송합니다:
* `ver` String - Electron의 버전
* `platform` String - 예시 'win32'

View file

@ -7,7 +7,7 @@
```javascript
var win = ...; // 대화 상자를 사용할 BrowserWindow 객체
var dialog = require('dialog');
const dialog = require('electron').dialog;
console.log(dialog.showOpenDialog({ properties: [ 'openFile', 'openDirectory', 'multiSelections' ]}));
```

View file

@ -0,0 +1,101 @@
# DownloadItem
`DownloadItem` is an EventEmitter represents a download item in Electron. It
is used in `will-download` event of `Session` module, and allows users to
control the download item.
```javascript
// In the main process.
win.webContents.session.on('will-download', function(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");
}
});
```
## Events
### Event: 'updated'
Emits when the `downloadItem` gets updated.
### Event: 'done'
* `event` Event
* `state` String
* `completed` - The download completed successfully.
* `cancelled` - The download has been cancelled.
* `interrupted` - An error broke the connection with the file server.
Emits when the download is in a terminal state. This includes a completed
download, a cancelled download(via `downloadItem.cancel()`), and interrupted
download that can't be resumed.
## Methods
The `downloadItem` object has the following methods:
### `downloadItem.setSavePath(path)`
* `path` String - Set the save file path of the download item.
The API is only available in session's `will-download` callback function.
If user doesn't set the save path via the API, Electron will use the original
routine to determine the save path(Usually prompts a save dialog).
### `downloadItem.pause()`
Pauses the download.
### `downloadItem.resume()`
Resumes the download that has been paused.
### `downloadItem.cancel()`
Cancels the download operation.
### `downloadItem.getURL()`
Returns a `String` represents the origin url where the item is downloaded from.
### `downloadItem.getMimeType()`
Returns a `String` represents the mime type.
### `downloadItem.hasUserGesture()`
Returns a `Boolean` indicates whether the download has user gesture.
### `downloadItem.getFilename()`
Returns a `String` represents the file name of the download item.
**Note:** The file name is not always the same as the actual one saved in local
disk. If user changes the file name in a prompted download saving dialog, the
actual name of saved file will be different.
### `downloadItem.getTotalBytes()`
Returns a `Integer` represents the total size in bytes of the download item.
If the size is unknown, it returns 0.
### `downloadItem.getReceivedBytes()`
Returns a `Integer` represents the received bytes of the download item.
### `downloadItem.getContentDisposition()`
Returns a `String` represents the Content-Disposition field from the response
header.

View file

@ -9,7 +9,7 @@ Frameless Window는 [테두리](https://developer.mozilla.org/en-US/docs/Glossar
Frameless Window를 만드려면 [BrowserWindow](browser-window.md) 객체의 `options`에서 `frame` 옵션을 `false`로 지정하면 됩니다:
```javascript
var BrowserWindow = require('browser-window');
const BrowserWindow = require('electron').BrowserWindow;
var win = new BrowserWindow({ width: 800, height: 600, frame: false });
```
@ -20,8 +20,8 @@ OS X 10.10 Yosemite 이후의 최신 버전부터는 테두리가 없는 창을
옵션을 통해 제목만 숨기고 창 구성 요소("흔히 신호등으로 알고 있는")의 기능과 창 크기를 그대로 유지할 수 있습니다:
```javascript
var BrowserWindow = require('browser-window');
var win = new BrowserWindow({ width: 800, height: 600, 'title-bar-style': 'hidden' });
var win = new BrowserWindow({ 'title-bar-style': 'hidden' });
```
## 투명한 창 만들기

View file

@ -7,8 +7,9 @@
이 모듈은 `app` 모듈의 `ready` 이벤트 이전에 사용할 수 없습니다.
```javascript
var app = require('app');
var globalShortcut = require('global-shortcut');
const electron = require('electron');
const app = electron.app;
const globalShortcut = electron.globalShortcut;
app.on('ready', function() {
// 'ctrl+x' 단축키를 리스너에 등록합니다.

View file

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

View file

@ -11,9 +11,9 @@
```html
<!-- index.html -->
<script>
var remote = require('remote');
var Menu = remote.require('menu');
var MenuItem = remote.require('menu-item');
const remote = require('electron').remote;
const Menu = remote.Menu;
const MenuItem = remote.MenuItem;
var menu = new Menu();
menu.append(new MenuItem({ label: 'MenuItem1', click: function() { console.log('item 1 clicked'); } }));
@ -130,14 +130,14 @@ var template = [
submenu: [
{
label: 'Learn More',
click: function() { require('shell').openExternal('http://electron.atom.io') }
click: function() { require('electron').shell.openExternal('http://electron.atom.io') }
},
]
},
];
if (process.platform == 'darwin') {
var name = require('app').getName();
var name = require('electron').app.getName();
template.unshift({
label: name,
submenu: [

View file

@ -1,6 +1,6 @@
# NativeImage
# nativeImage
Electron은 파일 경로 또는 `NativeImage` 인스턴스를 통해 이미지를 사용할 수 있는 API를 가지고 있습니다.
Electron은 파일 경로 또는 `nativeImage` 인스턴스를 통해 이미지를 사용할 수 있는 API를 가지고 있습니다.
`null`을 전달할 경우 빈 이미지가 생성됩니다.
예를 들어 트레이 메뉴를 만들거나 윈도우의 아이콘을 설정할 때 다음과 같이 파일 경로를 전달하여 이미지를 사용할 수 있습니다:
@ -10,10 +10,9 @@ var appIcon = new Tray('/Users/somebody/images/icon.png');
var window = new BrowserWindow({icon: '/Users/somebody/images/window.png'});
```
이 예제는 클립보드로부터 가져온 `NativeImage`로 트레이 메뉴를 생성합니다:
이 예제는 클립보드로부터 가져온 `nativeImage`로 트레이 메뉴를 생성합니다:
```javascript
var clipboard = require('clipboard');
var image = clipboard.readImage();
var appIcon = new Tray(image);
```
@ -75,39 +74,39 @@ var appIcon = new Tray('/Users/somebody/images/icon.png');
## Methods
`NativeImage` 클래스는 다음과 같은 메서드를 가지고 있습니다:
`nativeImage` 클래스는 다음과 같은 메서드를 가지고 있습니다:
### `NativeImage.createEmpty()`
### `nativeImage.createEmpty()`
`NativeImage` 인스턴스를 만듭니다.
`nativeImage` 인스턴스를 만듭니다.
### `NativeImage.createFromPath(path)`
### `nativeImage.createFromPath(path)`
* `path` String
`path`로부터 이미지를 로드하여 새로운 `NativeImage` 인스턴스를 만듭니다.
`path`로부터 이미지를 로드하여 새로운 `nativeImage` 인스턴스를 만듭니다.
### `NativeImage.createFromBuffer(buffer[, scaleFactor])`
### `nativeImage.createFromBuffer(buffer[, scaleFactor])`
* `buffer` [Buffer][buffer]
* `scaleFactor` Double (optional)
`buffer`로부터 이미지를 로드하여 새로운 `NativeImage` 인스턴스를 만듭니다. `scaleFactor`는 1.0이 기본입니다.
`buffer`로부터 이미지를 로드하여 새로운 `nativeImage` 인스턴스를 만듭니다. `scaleFactor`의 기본값은 1.0 입니다.
### `NativeImage.createFromDataUrl(dataUrl)`
### `nativeImage.createFromDataURL(dataURL)`
* `dataUrl` String
* `dataURL` String
`dataUrl`로부터 이미지를 로드하여 새로운 `NativeImage` 인스턴스를 만듭니다.
`dataURL`로부터 이미지를 로드하여 새로운 `nativeImage` 인스턴스를 만듭니다.
## Instance Methods
`nativeImage` 인스턴스 객체에서 사용할 수 있는 메서드 입니다:
```javascript
var NativeImage = require('native-image');
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()`
@ -120,7 +119,7 @@ var image = NativeImage.createFromPath('/Users/somebody/images/icon.png');
`JPEG` 이미지를 인코딩한 데이터를 [Buffer][buffer]로 반환합니다.
### `image.toDataUrl()`
### `image.toDataURL()`
이미지를 data URL로 반환합니다.

View file

@ -1,4 +1,4 @@
# power-monitor
# powerMonitor
`power-monitor` 모듈은 PC의 파워 상태를 나타냅니다. (주로 노트북 등에서 사용됩니다)
이 모듈은 메인 프로세스에서만 사용할 수 있으며, (remote 모듈(RPC)을 사용해도 작동이 됩니다)
@ -10,7 +10,7 @@
var app = require('app');
app.on('ready', function() {
require('power-monitor').on('suspend', function() {
require('electron').powerMonitor.on('suspend', function() {
console.log('절전모드로 진입합니다!');
});
});

View file

@ -1,11 +1,11 @@
# powerSaveBlocker
`power-save-blocker` 모듈은 시스템이 저전력(슬립) 모드로 진입하는 것을 막고 앱 시스템과 화면이 항상 활성화 상태를 유지할 수 있도록 하는 몇가지 유틸리티를 제공하는 모듈입니다.
`powerSaveBlocker` 모듈은 시스템이 저전력(슬립) 모드로 진입하는 것을 막고 앱 시스템과 화면이 항상 활성화 상태를 유지할 수 있도록 하는 몇가지 유틸리티를 제공하는 모듈입니다.
예제:
```javascript
var powerSaveBlocker = require('power-save-blocker');
const powerSaveBlocker = require('electron').powerSaveBlocker;
var id = powerSaveBlocker.start('prevent-display-sleep');
console.log(powerSaveBlocker.isStarted(id));

View file

@ -5,11 +5,12 @@
다음 예제는 `file://` 프로토콜과 비슷한 일을 하는 커스텀 프로토콜을 설정합니다:
```javascript
var app = require('app');
var path = require('path');
const electron = require('electron');
const app = electron.app;
const path = require('path');
app.on('ready', function() {
var protocol = require('protocol');
var protocol = electron.protocol;
protocol.registerFileProtocol('atom', function(request, callback) {
var url = request.url.substr(7);
callback({path: path.normalize(__dirname + '/' + url)});

View file

@ -4,17 +4,17 @@
Electron의 메인 프로세스에선 GUI와 관련 있는(`dialog`, `menu`등) 모듈만 사용할 수 있습니다.
랜더러 프로세스에서 이러한 모듈들을 사용하려면 `ipc` 모듈을 통해 메인 프로세스와 inter-process 통신을 해야합니다.
또한, `remote` 모듈을 사용하면 inter-process 통신을 하지 않고도 간단한 메서드를 통해 직접 메인 프로세스의 모듈과 메서드를 사용할 수 있습니다.
이 개념은 Java의 [RMI](http://en.wikipedia.org/wiki/Java_remote_method_invocation)와 비슷합니다.
또한, `remote` 모듈을 사용하면 inter-process 통신을 하지 않고도 간단한 API를 통해 직접 메인 프로세스의 모듈과 메서드를 사용할 수 있습니다.
이 개념은 Java의 [RMI][rmi]와 비슷합니다.
다음 예제는 랜더러 프로세스에서 브라우저 창을 만드는 예제입니다:
```javascript
var remote = require('remote');
var BrowserWindow = remote.require('browser-window');
const remote = require('electron').remote;
const BrowserWindow = remote.BrowserWindow;
var win = new BrowserWindow({ width: 800, height: 600 });
win.loadUrl('https://github.com');
win.loadURL('https://github.com');
```
**참고:** 반대로 메인 프로세스에서 랜더러 프로세스에 접근 하려면 [webContents.executeJavascript](web-contents.md#webcontentsexecutejavascriptcode-usergesture) 메서드를 사용하면 됩니다.
@ -98,6 +98,15 @@ remote.getCurrentWindow().on('close', function() {
이러한 문제를 피하려면 랜더러 프로세스에서 메인 프로세스로 넘긴 함수의 참조를 사용 후 확실하게 제거해야 합니다.
작업 후 이벤트 콜백을 포함하여 책임 있게 함수의 참조를 제거하거나 메인 프로세스에서 랜더러 프로세스가 종료될 때 내부적으로 함수 참조를 제거하도록 설계해야 합니다.
## 메인 프로세스의 빌트인 모듈에 접근
메인 프로세스의 빌트인 모듈은 `remote` 모듈에 getter로 등록되어 있습니다.
따라서 `remote` 모듈을 `electron` 모듈처럼 직접 사용할 수 있습니다.
```javascript
const app = remote.app;
```
## Methods
`remote` 모듈은 다음과 같은 메서드를 가지고 있습니다:
@ -125,3 +134,5 @@ remote.getCurrentWindow().on('close', function() {
### `remote.process`
메인 프로세스의 `process` 객체를 반환합니다. `remote.getGlobal('process')`와 같습니다. 하지만 캐시 됩니다.
[rmi]: http://en.wikipedia.org/wiki/Java_remote_method_invocation

View file

@ -11,13 +11,14 @@
다음 예제는 화면 전체를 채우는 윈도우 창을 생성합니다:
```javascript
var app = require('app');
var BrowserWindow = require('browser-window');
const electron = require('electron');
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
var mainWindow;
app.on('ready', function() {
var electronScreen = require('screen');
var electronScreen = electron.screen;
var size = electronScreen.getPrimaryDisplay().workAreaSize;
mainWindow = new BrowserWindow({ width: size.width, height: size.height });
});

View file

@ -7,7 +7,7 @@
var BrowserWindow = require('browser-window');
var win = new BrowserWindow({ width: 800, height: 600 });
win.loadUrl("http://github.com");
win.loadURL("http://github.com");
var session = win.webContents.session
```
@ -27,7 +27,7 @@ Electron의 `webContents`에서 `item`을 다운로드할 때 발생하는 이
```javascript
session.on('will-download', function(event, item, webContents) {
event.preventDefault();
require('request')(item.getUrl(), function(data) {
require('request')(item.getURL(), function(data) {
require('fs').writeFileSync('/somewhere', data);
});
});
@ -46,7 +46,7 @@ var BrowserWindow = require('browser-window');
var win = new BrowserWindow({ width: 800, height: 600 });
win.loadUrl('https://github.com');
win.loadURL('https://github.com');
win.webContents.on('did-finish-load', function() {
// 모든 쿠키를 가져옵니다.

View file

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

View file

@ -2,24 +2,25 @@
Electron은 모든 [Node.js의 built-in 모듈](http://nodejs.org/api/)과 third-party node 모듈을 완벽하게 지원합니다. ([네이티브 모듈](../tutorial/using-native-node-modules.md) 포함)
Electron은 네이티브 데스크톱 어플리케이션을 개발 할 수 있도록 추가적인 built-in 모듈을 제공합니다.
또한 Electron은 네이티브 데스크톱 어플리케이션을 개발 할 수 있도록 추가적인 built-in 모듈을 제공합니다.
몇몇 모듈은 메인 프로세스에서만 사용할 수 있고 어떤 모듈은 랜더러 프로세스(웹 페이지)에서만 사용할 수 있습니다.
또한 두 프로세스 모두 사용할 수 있는 모듈도 있습니다.
기본적인 규칙으로 [GUI](https://en.wikipedia.org/wiki/Graphical_user_interface)와 저 수준 시스템에 관련된 모듈들은 오직 메인 프로세스에서만 사용할 수 있습니다.
[메인 프로세스 vs. 랜더러 프로세스](../tutorial/quick-start.md#메인 프로세스) 컨셉에 익숙해야 이 모듈들을 사용하기 쉬우므로 관련 문서를 읽어 보는 것을 권장합니다.
기본적인 규칙으로 [GUI][gui]와 저 수준 시스템에 관련된 모듈들은 오직 메인 프로세스에서만 사용할 수 있습니다.
[메인 프로세스 vs. 랜더러 프로세스](../tutorial/quick-start.md#메인-프로세스) 컨셉에 익숙해야 모듈을 다루기 쉬우므로 관련 문서를 읽어 보는 것을 권장합니다.
메인 프로세스 스크립트는 일반 Node.js 스크립트와 비슷합니다:
```javascript
var app = require('app');
var BrowserWindow = require('browser-window');
const electron = require('electron');
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
var window = null;
app.on('ready', function() {
window = new BrowserWindow({width: 800, height: 600});
window.loadUrl('https://github.com');
window.loadURL('https://github.com');
});
```
@ -28,13 +29,47 @@ app.on('ready', function() {
```html
<!DOCTYPE html>
<html>
<body>
<script>
var remote = require('remote');
console.log(remote.require('app').getVersion());
</script>
</body>
<body>
<script>
const remote = require('electron').remote;
console.log(remote.app.getVersion());
</script>
</body>
</html>
```
어플리케이션을 실행하려면 [앱 실행하기](../tutorial/quick-start.md#앱 실행하기) 문서를 참고하기 바랍니다.
## 분리 할당
만약 CoffeeScript나 Babel을 사용하고 있다면, 빌트인 모듈을 사용할 때
[분리 할당][desctructuring-assignment]을 통해 직관적으로 사용할 수 있습니다:
```javascript
const {app, BrowserWindow} = require('electron')
```
아직 플레인 자바스크립트를 쓰고 있다면, Chrome이 ES6를 완전히 지원하기 전까지 기다려야 합니다.
## 이전 스타일의 빌트인 모듈 비활성화
v0.35.0 이전 버전에선 빌트인 모듈이 모두 `require('module-name')`같은 형식으로 사용되었습니다.
하지만 [많은 단점][issue-387]이 있기 때문에 현재 변경되었습니다.
하지만 오래된 앱의 호환성 유지를 위해 아직 구 버전 API를 지원하고 있습니다.
완벽하게 모든 구 버전 API를 비활성화하려면 `ELECTRON_HIDE_INTERNAL_MODULES` 환경 변수를 설정하면 됩니다:
```javascript
process.env.ELECTRON_HIDE_INTERNAL_MODULES = 'true'
```
또는 `hideInternalModules` API를 사용해도 됩니다:
```javascript
require('electron').hideInternalModules()
```
[gui]: https://en.wikipedia.org/wiki/Graphical_user_interface
[main-process]: ../tutorial/quick-start.md#메인-프로세스
[desctructuring-assignment]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
[issue-387]: https://github.com/atom/electron/issues/387

View file

@ -3,9 +3,10 @@
`Tray`는 OS의 알림 영역에 아이콘을 표시합니다. 보통 컨텍스트 메뉴(context menu)를 같이 사용합니다.
```javascript
var app = require('app');
var Menu = require('menu');
var Tray = require('tray');
const electron = require('electron');
const app = electron.app;
const Menu = electron.Menu;
const Tray = electron.Tray;
var appIcon = null;
app.on('ready', function(){
@ -29,7 +30,7 @@ __플랫폼별 한계:__
* 앱 알림 표시기는 컨텍스트 메뉴를 가지고 있을 때만 보입니다.
* Linux에서 앱 알림 표시기가 사용될 경우, `clicked` 이벤트는 무시됩니다.
이러한 이유로 Tray API가 모든 플랫폼에서 똑같이 작동하게 하고 싶다면 `clicked` 이벤트에 의존해선 안됩니다.
이러한 이유로 Tray API가 모든 플랫폼에서 똑같이 작동하게 하고 싶다면 `click` 이벤트에 의존해선 안됩니다.
그리고 언제나 컨텍스트 메뉴를 포함해야 합니다.
## Class: Tray
@ -48,7 +49,7 @@ __플랫폼별 한계:__
**참고:** 몇가지 이벤트는 특정한 플랫폼에서만 작동합니다.
### Event: 'clicked'
### Event: 'click'
* `event` Event
* `altKey` Boolean
@ -65,7 +66,7 @@ __플랫폼별 한계:__
__주의:__ `bounds`는 OS X 와 Windows에서만 작동합니다.
### Event: 'right-clicked' _OS X_ _Windows_
### Event: 'right-click' _OS X_ _Windows_
* `event` Event
* `altKey` Boolean
@ -80,7 +81,7 @@ __주의:__ `bounds`는 OS X 와 Windows에서만 작동합니다.
트레이 아이콘을 오른쪽 클릭될 때 호출 됩니다.
### Event: 'double-clicked' _OS X_ _Windows_
### Event: 'double-click' _OS X_ _Windows_
* `event` Event
* `altKey` Boolean
@ -97,15 +98,15 @@ __주의:__ `bounds`는 OS X 와 Windows에서만 작동합니다.
### Event: 'balloon-show' _Windows_
알림풍선이 보여질 때 발생하는 이벤트입니다.
풍선 팝업이 보여질 때 발생하는 이벤트입니다.
### Event: 'balloon-clicked' _Windows_
### Event: 'balloon-click' _Windows_
알림풍선이 클릭될 때 발생하는 이벤트입니다.
풍선 팝업이 클릭될 때 발생하는 이벤트입니다.
### Event: 'balloon-closed' _Windows_
알림풍선이 시간이 지나 사라지거나 유저가 클릭하여 닫을 때 발생하는 이벤트입니다.
풍선 팝업이 시간이 지나 사라지거나 유저가 클릭하여 닫을 때 발생하는 이벤트입니다.
### Event: 'drop' _OS X_
@ -177,7 +178,7 @@ __주의:__ `bounds`는 OS X 와 Windows에서만 작동합니다.
* `title` String
* `content` String
트레이에 알림풍선을 생성합니다.
트레이에 풍선 팝업을 생성합니다.
### `Tray.popContextMenu([position])` _OS X_ _Windows_

View file

@ -5,7 +5,7 @@
다음 예제는 현재 페이지를 200% 줌 합니다:
```javascript
var webFrame = require('web-frame');
var webFrame = require('electron').webFrame;
webFrame.setZoomFactor(2);
```
@ -55,14 +55,14 @@ Input field나 text area에 철자 검사(spell checking) 제공자를 설정합
[node-spellchecker][spellchecker]를 철자 검사 제공자로 사용하는 예제입니다:
```javascript
require('web-frame').setSpellCheckProvider("en-US", true, {
webFrame.setSpellCheckProvider("en-US", true, {
spellCheck: function(text) {
return !(require('spellchecker').isMisspelled(text));
}
});
```
### `webFrame.registerUrlSchemeAsSecure(scheme)`
### `webFrame.registerURLSchemeAsSecure(scheme)`
* `scheme` String
@ -70,10 +70,16 @@ require('web-frame').setSpellCheckProvider("en-US", true, {
보안 스킴은 혼합된 컨텐츠 경고를 발생시키지 않습니다. 예를 들어 `https``data`는 네트워크 공격자로부터 손상될 가능성이 없기 때문에 보안 스킴이라고 할 수 있습니다.
### `webFrame.registerUrlSchemeAsBypassingCsp(scheme)`
### `webFrame.registerURLSchemeAsBypassingCSP(scheme)`
* `scheme` String
현재 페이지 컨텐츠의 보안 정책에 상관없이 이 `scheme`로부터 리소스가 로드됩니다.
현재 페이지 컨텐츠의 보안 정책에 상관없이 `scheme`로부터 리소스가 로드됩니다.
### `webFrame.registerURLSchemeAsPrivileged(scheme)`
* `scheme` String
보안 `scheme`를 지정합니다. 리소스와 ServiceWorker 설정에 대해 보안 정책을 우회합니다.
[spellchecker]: https://github.com/atom/node-spellchecker

View file

@ -156,7 +156,7 @@ webview.addEventListener("dom-ready", function() {
});
```
### `<webview>.getUrl()`
### `<webview>.getURL()`
페이지의 URL을 반환합니다.
@ -376,7 +376,7 @@ Returns:
* `errorCode` Integer
* `errorDescription` String
* `validatedUrl` String
* `validatedURL` String
`did-finish-load`와 비슷합니다. 하지만 이 이벤트는 `window.stop()`과 같은 무언가로 인해 로드에 실패했을 때 발생하는 이벤트입니다.
@ -401,8 +401,8 @@ Returns:
Returns:
* `status` Boolean
* `newUrl` String
* `originalUrl` String
* `newURL` String
* `originalURL` String
* `httpResponseCode` Integer
* `requestMethod` String
* `referrer` String
@ -415,8 +415,8 @@ Returns:
Returns:
* `oldUrl` String
* `newUrl` String
* `oldURL` String
* `newURL` String
* `isMainFrame` Boolean
리소스를 요청하고 받는 도중에 리다이렉트가 생기면 발생하는 이벤트입니다.
@ -484,7 +484,7 @@ Returns:
```javascript
webview.addEventListener('new-window', function(e) {
require('shell').openExternal(e.url);
require('electron').shell.openExternal(e.url);
});
```
@ -522,9 +522,9 @@ webview.send('ping');
```javascript
// In guest page.
var ipc = require('ipc');
ipc.on('ping', function() {
ipc.sendToHost('pong');
var ipcRenderer = require('electron').ipcRenderer;
ipcRenderer.on('ping', function() {
ipcRenderer.sendToHost('pong');
});
```

View file

@ -47,14 +47,14 @@ $ asar list /path/to/example.asar
`asar` 아카이브에선 다음과 같이 파일을 읽을 수 있습니다:
```javascript
var fs = require('fs');
const fs = require('fs');
fs.readFileSync('/path/to/example.asar/file.txt');
```
아카이브 내의 루트 디렉터리를 리스팅합니다:
```javascript
var fs = require('fs');
const fs = require('fs');
fs.readdirSync('/path/to/example.asar');
```
@ -67,9 +67,9 @@ require('/path/to/example.asar/dir/module.js');
`BrowserWindow` 클래스를 이용해 원하는 웹 페이지도 표시할 수 있습니다:
```javascript
var BrowserWindow = require('browser-window');
const BrowserWindow = require('electron').BrowserWindow;
var win = new BrowserWindow({width: 800, height: 600});
win.loadUrl('file:///path/to/example.asar/static/index.html');
win.loadURL('file:///path/to/example.asar/static/index.html');
```
### Web API
@ -90,8 +90,8 @@ $.get('file:///path/to/example.asar/file.txt', function(data) {
### `asar` 아카이브를 일반 파일로 취급하기
`asar` 아카이브의 체크섬(checksum)을 검사하기 위해선 `asar` 아카이브를 파일 그대로 읽어들여야 할 필요가 있습니다.
이 작업을 하기 위해 `original-fs`라고 하는 빌트인 모듈을 `fs` 모듈 대신에 사용할 수 있습니다.
`asar` 아카이브의 체크섬(checksum)을 검사하는 작업등을 하기 위해선 `asar` 아카이브를 파일 그대로 읽어야 합니다.
러한 작업을 하기 위해 `original-fs` 빌트인 모듈을 `fs` 모듈 대신에 사용할 수 있습니다.
이 모듈은 `asar` 지원이 빠져있습니다. 즉 파일 그대로를 읽어들입니다:
```javascript
@ -112,13 +112,13 @@ originalFs.readFileSync('/path/to/example.asar');
`asar` 아카이브는 디렉터리처럼 사용할 수 있도록 구현되었지만 그것은 실제 파일시스템의 디렉터리가 아닌 가상의 디렉터리입니다.
그런 이유로 몇몇 API에서 지원하는 `cwd` 옵션을 `asar` 아카이브 안의 디렉터리 경로로 지정하면 나중에 문제가 발생할 수 있습니다.
### 특정 API로 인한 예외적인 압축 해제
### 특정 API로 인한 예외적인 아카이브 압축 해제
많은 `fs` API가 `asar` 아카이브의 압축을 해제하지 않고 바로 아카이브를 읽거나 정보를 가져올 수 있으나
몇몇 API는 시스템의 실제 파일의 경로를 기반으로 작동하므로 이 API들을 사용할 땐 Electron은
이 API가 원할하게 작동할 수 있도록 하기 위해 임시경로에 해당 파일의 압축을 해제합니다. 이 작업은 약간의 오버헤드를 불러 일으킬 수 있습니다.
몇몇 API는 시스템의 실제 파일의 경로를 기반으로 작동하므로 Electron은 API가 원할하게 작동할 수 있도록
임시 경로에 해당되는 파일의 압축을 해제합니다. 이 작업은 약간의 오버헤드를 불러 일으킬 수 있습니다.
해당하는 API 메서드는 다음과 같습니다:
위 예외에 해당하는 API 메서드는 다음과 같습니다:
* `child_process.execFile`
* `fs.open`
@ -127,7 +127,7 @@ originalFs.readFileSync('/path/to/example.asar');
### `fs.stat`의 잘못된 스테이터스 정보
`fs.stat` 로 부터 반환되는 `Stats` 객체와 비슷한 API들은 `asar` 아카이브를 타겟으로 할 경우 예측된 디렉터리 일 정보를 가집니다.
`fs.stat` 로 부터 반환되는 `Stats` 객체와 비슷한 API들은 `asar` 아카이브를 타겟으로 할 경우 예측된 디렉터리 일 정보를 가집니다.
왜냐하면 아카이브의 디렉터리 경로는 실제 파일시스템에 존재하지 않기 때문입니다.
그러한 이유로 파일 크기와 파일 타입 등을 확인할 때 `Stats` 객체를 신뢰해선 안됩니다.
@ -145,6 +145,6 @@ $ asar pack app app.asar --unpack *.node
커맨드를 실행한 후 같은 디렉터리에 `app.asar` 파일 외에 `app.asar.unpacked` 폴더가 같이 생성됩니다.
이 폴더안에 unpack 옵션에서 설정한 파일들이 압축이 풀린 상태로 포함되어 있습니다.
유저에게 어플리케이션을 배포할 때 반드시 해당 폴더도 같이 배포하여야합니다.
사용자에게 어플리케이션을 배포할 때 반드시 해당 폴더도 같이 배포해야 합니다.
[asar]: https://github.com/atom/asar

View file

@ -28,7 +28,7 @@ myNotification.onclick = function () {
* Windows 10에선 "아무 문제 없이 잘" 작동합니다.
* Windows 8.1과 8에선 [Application User Model ID][app-user-model-id]로 바로가기를 만들어 놔야 합니다.
이 바로가기는 반드시 시작 화면에 설치되어 있어야 합니다. 참고로 반드시 시작 화면에 고정 할 필요는 없습니다.
* Windows 7과 그 이하 버전은 데스크톱 알림을 지원하지 않습니다. 혹시 "풍선 알림" 기능을 찾는다면 [Tray API](tray-balloon)를 사용하세요.
* Windows 7과 그 이하 버전은 데스크톱 알림을 지원하지 않습니다. 혹시 "풍선 팝업 알림" 기능을 찾는다면 [Tray API](tray-balloon)를 사용하세요.
이미지를 데스크톱 알림에 사용하려면 알림 옵션의 `icon` 속성에 로컬 이미지 파일(`png` 권장)을 지정하면 됩니다.
데스크톱 알림은 잘못된 경로를 지정하거나 `http/https` 기반의 URL을 지정해도 이미지가 보이지 않을 뿐 정상 작동합니다.
@ -70,7 +70,6 @@ __어플리케이션 dock menu:__
파일을 최근 문서에 추가하려면 [app.addRecentDocument][addrecentdocument] API를 사용할 수 있습니다:
```javascript
var app = require('app');
app.addRecentDocument('/Users/USERNAME/Desktop/work.type');
```
@ -104,8 +103,10 @@ __Terminal.app의 dock menu:__
커스텀 dock menu를 설정하려면 `app.dock.setMenu` API를 사용하면 됩니다. OS X에서만 사용 가능합니다:
```javascript
var app = require('app');
var Menu = require('menu');
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'); } },
{ label: 'New Window with Settings', submenu: [
@ -144,7 +145,6 @@ OS X의 dock menu(진짜 메뉴)와는 달리 Windows의 사용자 작업은 어
사용자 작업을 설정하려면 [app.setUserTasks][setusertaskstasks] 메서드를 통해 구현할 수 있습니다:
```javascript
var app = require('app');
app.setUserTasks([
{
program: process.execPath,
@ -187,8 +187,9 @@ __Windows Media Player의 섬네일 툴바:__
[BrowserWindow.setThumbarButtons][setthumbarbuttons] API를 통해 어플리케이션에 섬네일 툴바를 설정할 수 있습니다:
```javascript
var BrowserWindow = require('browser-window');
var path = require('path');
const BrowserWindow = require('electron').BrowserWindow;
const path = require('path');
var win = new BrowserWindow({
width: 800,
height: 600

View file

@ -22,13 +22,14 @@ $ git clone --recursive https://github.com/facebook/react-devtools.git
그리고 개발자 콘솔에서 다음 코드를 입력하면 확장 기능을 로드할 수 있습니다:
```javascript
require('remote').require('browser-window').addDevToolsExtension('/some-directory/react-devtools/shells/chrome');
const BrowserWindow = require('electron').remote.BrowserWindow;
BrowserWindow.addDevToolsExtension('/some-directory/react-devtools/shells/chrome');
```
확장 기능을 언로드 하고 콘솔을 다시 열 때 해당 확장 기능이 로드되지 않도록 하려면 `BrowserWindow.removeDevToolsExtension` API를 사용하면 됩니다:
```javascript
require('remote').require('browser-window').removeDevToolsExtension('React Developer Tools');
BrowserWindow.removeDevToolsExtension('React Developer Tools');
```
## 개발자 콘솔 확장 기능의 구성 형식

View file

@ -5,13 +5,14 @@
_main.js_
```javascript
var app = require('app');
var BrowserWindow = require('browser-window');
var onlineStatusWindow;
const electron = require('electron');
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
var onlineStatusWindow;
app.on('ready', function() {
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false });
onlineStatusWindow.loadUrl('file://' + __dirname + '/online-status.html');
onlineStatusWindow.loadURL('file://' + __dirname + '/online-status.html');
});
```
@ -43,14 +44,15 @@ _online-status.html_
_main.js_
```javascript
var app = require('app');
var ipcMain = require('ipc-main');
var BrowserWindow = require('browser-window');
var onlineStatusWindow;
const electron = require('electron');
const app = electron.app;
const ipcMain = electron.ipcMain;
const BrowserWindow = electron.BrowserWindow;
var onlineStatusWindow;
app.on('ready', function() {
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false });
onlineStatusWindow.loadUrl('file://' + __dirname + '/online-status.html');
onlineStatusWindow.loadURL('file://' + __dirname + '/online-status.html');
});
ipcMain.on('online-status-changed', function(event, status) {
@ -65,7 +67,7 @@ _online-status.html_
<html>
<body>
<script>
var ipcRenderer = require('ipc-renderer');
const ipcRenderer = require('electron').ipcRenderer;
var updateOnlineStatus = function() {
ipcRenderer.send('online-status-changed', navigator.onLine ? 'online' : 'offline');
};

View file

@ -64,11 +64,12 @@ __알림__: 만약 `main` 필드가 `package.json`에 설정되어 있지 않으
반드시 `main.js`에서 창을 만들고 시스템 이밴트를 처리해야합니다. 대표적인 예제로 다음과 같이 작성할 수 있습니다:
```javascript
var app = require('app'); // 어플리케이션 기반을 조작 하는 모듈.
var BrowserWindow = require('browser-window'); // 네이티브 브라우저 창을 만드는 모듈.
const electron = require('electron');
const app = electron.app; // 어플리케이션 기반을 조작 하는 모듈.
const BrowserWindow = electron.BrowserWindow; // 네이티브 브라우저 창을 만드는 모듈.
// Electron 개발자에게 crash-report를 보냄.
require('crash-reporter').start();
electron.crashReporter.start();
// 윈도우 객체를 전역에 유지합니다. 만약 이렇게 하지 않으면
// 자바스크립트 GC가 일어날 때 창이 멋대로 닫혀버립니다.
@ -90,7 +91,7 @@ app.on('ready', function() {
mainWindow = new BrowserWindow({width: 800, height: 600});
// 그리고 현재 디렉터리의 index.html을 로드합니다.
mainWindow.loadUrl('file://' + __dirname + '/index.html');
mainWindow.loadURL('file://' + __dirname + '/index.html');
// 개발자 콘솔을 엽니다.
mainWindow.webContents.openDevTools();

View file

@ -14,24 +14,9 @@ Electron에서 플래시 플러그인을 지원하기 위해선 이 두 가지
그리고 `browser-window``plugins` 스위치도 추가해야합니다.
```javascript
var app = require('app');
var BrowserWindow = require('browser-window');
// Report crashes to our server.
require('crash-reporter').start();
var mainWindow = null;
// Quit when all windows are closed.
app.on('window-all-closed', function() {
if (process.platform != 'darwin') {
app.quit();
}
});
// 플래시 플러그인의 위치를 설정합니다.
// Windows의 경우, /path/to/pepflashplayer.dll
// Mac의 경우, /path/to/PepperFlashPlayer.plugin
// OS X의 경우, /path/to/PepperFlashPlayer.plugin
// Linux의 경우, /path/to/libpepflashplayer.so
app.commandLine.appendSwitch('ppapi-flash-path', '/path/to/libpepflashplayer.so');
@ -46,7 +31,7 @@ app.on('ready', function() {
'plugins': true
}
});
mainWindow.loadUrl('file://' + __dirname + '/index.html');
mainWindow.loadURL('file://' + __dirname + '/index.html');
// Something else
});
```

View file

@ -39,7 +39,7 @@ $ npm install selenium-webdriver
한가지 다른점이 있다면 수동으로 크롬 드라이버 연결에 대해 설정하고 Electron 실행파일의 위치를 전달합니다:
```javascript
var webdriver = require('selenium-webdriver');
const webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder()
// 작동하고 있는 크롬 드라이버의 포트 "9515"를 사용합니다.
@ -89,7 +89,7 @@ $ npm install webdriverio
### 3. 크롬 드라이버에 연결
```javascript
var webdriverio = require('webdriverio');
const webdriverio = require('webdriverio');
var options = {
host: "localhost", // localhost에서 작동중인 크롬 드라이버 서버를 사용합니다.
port: 9515, // 연결할 크롬 드라이버 서버의 포트를 설정합니다.