📝 Update Korean docs as upstream
[ci skip]
This commit is contained in:
parent
12e62746b3
commit
6bad16377d
37 changed files with 314 additions and 287 deletions
|
@ -5,8 +5,8 @@
|
||||||
밑의 예시는 마지막 윈도우가 종료되었을 때, 어플리케이션을 종료시키는 예시입니다:
|
밑의 예시는 마지막 윈도우가 종료되었을 때, 어플리케이션을 종료시키는 예시입니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const app = require('electron').app;
|
const { app } = require('electron');
|
||||||
app.on('window-all-closed', function() {
|
app.on('window-all-closed', () => {
|
||||||
app.quit();
|
app.quit();
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
@ -244,7 +244,7 @@ Returns:
|
||||||
`callback(username, password)` 형태의 콜백을 호출하여 인증을 처리해야 합니다.
|
`callback(username, password)` 형태의 콜백을 호출하여 인증을 처리해야 합니다.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
app.on('login', function(event, webContents, request, authInfo, callback) {
|
app.on('login', (event, webContents, request, authInfo, callback) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
callback('username', 'secret');
|
callback('username', 'secret');
|
||||||
})
|
})
|
||||||
|
@ -486,9 +486,9 @@ OS X에선 사용자가 Finder에서 어플리케이션의 두 번째 인스턴
|
||||||
인스턴스의 윈도우를 활성화 시키는 예시입니다:
|
인스턴스의 윈도우를 활성화 시키는 예시입니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var myWindow = null;
|
let myWindow = null;
|
||||||
|
|
||||||
var shouldQuit = app.makeSingleInstance(function(commandLine, workingDirectory) {
|
const shouldQuit = app.makeSingleInstance((commandLine, workingDirectory) => {
|
||||||
// 어플리케이션을 중복 실행했습니다. 주 어플리케이션 인스턴스를 활성화 합니다.
|
// 어플리케이션을 중복 실행했습니다. 주 어플리케이션 인스턴스를 활성화 합니다.
|
||||||
if (myWindow) {
|
if (myWindow) {
|
||||||
if (myWindow.isMinimized()) myWindow.restore();
|
if (myWindow.isMinimized()) myWindow.restore();
|
||||||
|
@ -503,7 +503,7 @@ if (shouldQuit) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 윈도우를 생성하고 각종 리소스를 로드하고 작업합니다.
|
// 윈도우를 생성하고 각종 리소스를 로드하고 작업합니다.
|
||||||
app.on('ready', function() {
|
app.on('ready', () => {
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -6,13 +6,13 @@
|
||||||
|
|
||||||
```javascript
|
```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 });
|
let win = new BrowserWindow({ width: 800, height: 600, show: false });
|
||||||
win.on('closed', function() {
|
win.on('closed', () => {
|
||||||
win = null;
|
win = null;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -318,7 +318,7 @@ Returns:
|
||||||
e.g. `APPCOMMAND_BROWSER_BACKWARD` 는 `browser-backward`와 같이 반환됩니다.
|
e.g. `APPCOMMAND_BROWSER_BACKWARD` 는 `browser-backward`와 같이 반환됩니다.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
someWindow.on('app-command', function(e, cmd) {
|
someWindow.on('app-command', (e, cmd) => {
|
||||||
// 마우스의 뒤로가기 버튼을 눌렀을 때 뒤로가기 탐색을 실행합니다
|
// 마우스의 뒤로가기 버튼을 눌렀을 때 뒤로가기 탐색을 실행합니다
|
||||||
if (cmd === 'browser-backward' && someWindow.webContents.canGoBack()) {
|
if (cmd === 'browser-backward' && someWindow.webContents.canGoBack()) {
|
||||||
someWindow.webContents.goBack();
|
someWindow.webContents.goBack();
|
||||||
|
|
|
@ -7,11 +7,11 @@
|
||||||
명령줄 옵션을 추가로 지정할 수 있습니다:
|
명령줄 옵션을 추가로 지정할 수 있습니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const app = require('electron').app;
|
const { app } = require('electron');
|
||||||
app.commandLine.appendSwitch('remote-debugging-port', '8315');
|
app.commandLine.appendSwitch('remote-debugging-port', '8315');
|
||||||
app.commandLine.appendSwitch('host-rules', 'MAP * 127.0.0.1');
|
app.commandLine.appendSwitch('host-rules', 'MAP * 127.0.0.1');
|
||||||
|
|
||||||
app.on('ready', function() {
|
app.on('ready', () => {
|
||||||
// Your code here
|
// Your code here
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
|
@ -2,8 +2,10 @@
|
||||||
|
|
||||||
> 시스템 클립보드에 복사와 붙여넣기를 수행합니다.
|
> 시스템 클립보드에 복사와 붙여넣기를 수행합니다.
|
||||||
|
|
||||||
|
다음 예시는 클립보드에 문자열을 쓰는 방법을 보여줍니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const clipboard = require('electron').clipboard;
|
const { clipboard } = require('electron');
|
||||||
clipboard.writeText('Example String');
|
clipboard.writeText('Example String');
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
`chrome://tracing/` 페이지를 열고 생성된 파일을 로드하면 결과를 볼 수 있습니다.
|
`chrome://tracing/` 페이지를 열고 생성된 파일을 로드하면 결과를 볼 수 있습니다.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const contentTracing = require('electron').contentTracing;
|
const { contentTracing } = require('electron');
|
||||||
|
|
||||||
const options = {
|
const options = {
|
||||||
categoryFilter: '*',
|
categoryFilter: '*',
|
||||||
|
@ -17,8 +17,8 @@ const options = {
|
||||||
contentTracing.startRecording(options, function() {
|
contentTracing.startRecording(options, function() {
|
||||||
console.log('Tracing started');
|
console.log('Tracing started');
|
||||||
|
|
||||||
setTimeout(function() {
|
setTimeout(() => {
|
||||||
contentTracing.stopRecording('', function(path) {
|
contentTracing.stopRecording('', (path) => {
|
||||||
console.log('Tracing data recorded to ' + path);
|
console.log('Tracing data recorded to ' + path);
|
||||||
});
|
});
|
||||||
}, 5000);
|
}, 5000);
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
다음 예시는 윈격 서버에 어플리케이션 크래시 정보를 자동으로 보고하는 예시입니다:
|
다음 예시는 윈격 서버에 어플리케이션 크래시 정보를 자동으로 보고하는 예시입니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const crashReporter = require('electron').crashReporter;
|
const { crashReporter } = require('electron');
|
||||||
|
|
||||||
crashReporter.start({
|
crashReporter.start({
|
||||||
productName: 'YourName',
|
productName: 'YourName',
|
||||||
|
|
|
@ -5,9 +5,9 @@
|
||||||
|
|
||||||
```javascript
|
```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;
|
if (error) throw error;
|
||||||
for (var i = 0; i < sources.length; ++i) {
|
for (var i = 0; i < sources.length; ++i) {
|
||||||
if (sources[i].name == "Electron") {
|
if (sources[i].name == "Electron") {
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var win = ...; // 대화 상자를 사용할 BrowserWindow 객체
|
var win = ...; // 대화 상자를 사용할 BrowserWindow 객체
|
||||||
const dialog = require('electron').dialog;
|
const { dialog } = require('electron');
|
||||||
console.log(dialog.showOpenDialog({ properties: [ 'openFile', 'openDirectory', 'multiSelections' ]}));
|
console.log(dialog.showOpenDialog({ properties: [ 'openFile', 'openDirectory', 'multiSelections' ]}));
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ console.log(dialog.showOpenDialog({ properties: [ 'openFile', 'openDirectory', '
|
||||||
객체를 사용하고 싶다면, `remote`를 통해 접근하는 방법을 고려해야 합니다:
|
객체를 사용하고 싶다면, `remote`를 통해 접근하는 방법을 고려해야 합니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const dialog = require('electron').remote.dialog;
|
const { dialog } = require('electron').remote;
|
||||||
```
|
```
|
||||||
|
|
||||||
## Methods
|
## Methods
|
||||||
|
|
|
@ -8,17 +8,17 @@
|
||||||
|
|
||||||
```javascript
|
```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.
|
// Set the save path, making Electron not to prompt a save dialog.
|
||||||
item.setSavePath('/tmp/save.pdf');
|
item.setSavePath('/tmp/save.pdf');
|
||||||
console.log(item.getMimeType());
|
console.log(item.getMimeType());
|
||||||
console.log(item.getFilename());
|
console.log(item.getFilename());
|
||||||
console.log(item.getTotalBytes());
|
console.log(item.getTotalBytes());
|
||||||
item.on('updated', function() {
|
item.on('updated', () => {
|
||||||
console.log('Received bytes: ' + item.getReceivedBytes());
|
console.log('Received bytes: ' + item.getReceivedBytes());
|
||||||
});
|
});
|
||||||
item.on('done', function(e, state) {
|
item.on('done', (e, state) => {
|
||||||
if (state == "completed") {
|
if (state === "completed") {
|
||||||
console.log("Download successfully");
|
console.log("Download successfully");
|
||||||
} else {
|
} else {
|
||||||
console.log("Download is cancelled or interrupted that can't be resumed");
|
console.log("Download is cancelled or interrupted that can't be resumed");
|
||||||
|
|
|
@ -14,16 +14,16 @@ API를 사용하여 작업할 때 선택된 파일의 경로를 알 수 있도
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
var holder = document.getElementById('holder');
|
const holder = document.getElementById('holder');
|
||||||
holder.ondragover = function () {
|
holder.ondragover = () => {
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
holder.ondragleave = holder.ondragend = function () {
|
holder.ondragleave = holder.ondragend = () => {
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
holder.ondrop = function (e) {
|
holder.ondrop = (e) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
var file = e.dataTransfer.files[0];
|
const file = e.dataTransfer.files[0];
|
||||||
console.log('File you dragged here is', file.path);
|
console.log('File you dragged here is', file.path);
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
|
@ -13,8 +13,8 @@ Frameless Window를 만드려면 [BrowserWindow](browser-window.md) 객체의
|
||||||
`options` 객체에서 `frame` 옵션을 `false`로 지정하면 됩니다:
|
`options` 객체에서 `frame` 옵션을 `false`로 지정하면 됩니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const BrowserWindow = require('electron').BrowserWindow;
|
const { BrowserWindow } = require('electron');
|
||||||
var win = new BrowserWindow({ width: 800, height: 600, frame: false });
|
let win = new BrowserWindow({ width: 800, height: 600, frame: false });
|
||||||
```
|
```
|
||||||
|
|
||||||
### 최신 OS X에서 사용할 수 있는 대안
|
### 최신 OS X에서 사용할 수 있는 대안
|
||||||
|
@ -25,7 +25,7 @@ OS X 10.10 Yosemite 이후의 최신 버전부터는 테두리가 없는 창을
|
||||||
("흔히 신호등으로 알고 있는")의 기능과 창 크기를 그대로 유지할 수 있습니다:
|
("흔히 신호등으로 알고 있는")의 기능과 창 크기를 그대로 유지할 수 있습니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var win = new BrowserWindow({ 'titleBarStyle': 'hidden' });
|
let win = new BrowserWindow({ 'titleBarStyle': 'hidden' });
|
||||||
```
|
```
|
||||||
|
|
||||||
## 투명한 창 만들기
|
## 투명한 창 만들기
|
||||||
|
@ -34,7 +34,7 @@ Frameless Window 창의 배경을 투명하게 만들고 싶다면 `transparent`
|
||||||
바꿔주기만 하면됩니다:
|
바꿔주기만 하면됩니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var win = new BrowserWindow({ transparent: true, frame: false });
|
let win = new BrowserWindow({ transparent: true, frame: false });
|
||||||
```
|
```
|
||||||
|
|
||||||
### API의 한계
|
### API의 한계
|
||||||
|
|
|
@ -12,12 +12,11 @@
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const electron = require('electron');
|
const electron = require('electron');
|
||||||
const app = electron.app;
|
const { app, globalShortcut } = electron;
|
||||||
const globalShortcut = electron.globalShortcut;
|
|
||||||
|
|
||||||
app.on('ready', function() {
|
app.on('ready', () => {
|
||||||
// 'CommandOrControl+X' 단축키를 리스너에 등록합니다.
|
// 'CommandOrControl+X' 단축키를 리스너에 등록합니다.
|
||||||
var ret = globalShortcut.register('CommandOrControl+X', function() {
|
const ret = globalShortcut.register('CommandOrControl+X', () => {
|
||||||
console.log('CommandOrControl+X is pressed');
|
console.log('CommandOrControl+X is pressed');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -29,7 +28,7 @@ app.on('ready', function() {
|
||||||
console.log(globalShortcut.isRegistered('CommandOrControl+X'));
|
console.log(globalShortcut.isRegistered('CommandOrControl+X'));
|
||||||
});
|
});
|
||||||
|
|
||||||
app.on('will-quit', function() {
|
app.on('will-quit', () => {
|
||||||
// 단축키의 등록을 해제합니다.
|
// 단축키의 등록을 해제합니다.
|
||||||
globalShortcut.unregister('CommandOrControl+X');
|
globalShortcut.unregister('CommandOrControl+X');
|
||||||
|
|
||||||
|
|
|
@ -20,13 +20,13 @@
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// 메인 프로세스
|
// 메인 프로세스
|
||||||
const ipcMain = require('electron').ipcMain;
|
const { ipcMain } = require('electron');
|
||||||
ipcMain.on('asynchronous-message', function(event, arg) {
|
ipcMain.on('asynchronous-message', (event, arg) => {
|
||||||
console.log(arg); // "ping" 출력
|
console.log(arg); // "ping" 출력
|
||||||
event.sender.send('asynchronous-reply', 'pong');
|
event.sender.send('asynchronous-reply', 'pong');
|
||||||
});
|
});
|
||||||
|
|
||||||
ipcMain.on('synchronous-message', function(event, arg) {
|
ipcMain.on('synchronous-message', (event, arg) => {
|
||||||
console.log(arg); // "ping" 출력
|
console.log(arg); // "ping" 출력
|
||||||
event.returnValue = 'pong';
|
event.returnValue = 'pong';
|
||||||
});
|
});
|
||||||
|
@ -34,10 +34,10 @@ ipcMain.on('synchronous-message', function(event, arg) {
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// 렌더러 프로세스 (웹 페이지)
|
// 렌더러 프로세스 (웹 페이지)
|
||||||
const ipcRenderer = require('electron').ipcRenderer;
|
const { ipcRenderer } = require('electron');
|
||||||
console.log(ipc.sendSync('synchronous-message', 'ping')); // "pong" 출력
|
console.log(ipc.sendSync('synchronous-message', 'ping')); // "pong" 출력
|
||||||
|
|
||||||
ipcRenderer.on('asynchronous-reply', function(arg) {
|
ipcRenderer.on('asynchronous-reply', (arg) => {
|
||||||
console.log(arg); // "pong" 출력
|
console.log(arg); // "pong" 출력
|
||||||
});
|
});
|
||||||
ipcRenderer.send('asynchronous-message', 'ping');
|
ipcRenderer.send('asynchronous-message', 'ping');
|
||||||
|
|
|
@ -14,16 +14,14 @@
|
||||||
```html
|
```html
|
||||||
<!-- index.html -->
|
<!-- index.html -->
|
||||||
<script>
|
<script>
|
||||||
const remote = require('electron').remote;
|
const { Menu, MenuItem } = require('electron').remote;
|
||||||
const Menu = remote.Menu;
|
|
||||||
const MenuItem = remote.MenuItem;
|
|
||||||
|
|
||||||
var menu = new Menu();
|
const menu = new Menu();
|
||||||
menu.append(new MenuItem({ label: 'MenuItem1', click: function() { console.log('item 1 clicked'); } }));
|
menu.append(new MenuItem({ label: 'MenuItem1', click: () => { console.log('item 1 clicked'); } }));
|
||||||
menu.append(new MenuItem({ type: 'separator' }));
|
menu.append(new MenuItem({ type: 'separator' }));
|
||||||
menu.append(new MenuItem({ label: 'MenuItem2', type: 'checkbox', checked: true }));
|
menu.append(new MenuItem({ label: 'MenuItem2', type: 'checkbox', checked: true }));
|
||||||
|
|
||||||
window.addEventListener('contextmenu', function (e) {
|
window.addEventListener('contextmenu', (e) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
menu.popup(remote.getCurrentWindow());
|
menu.popup(remote.getCurrentWindow());
|
||||||
}, false);
|
}, false);
|
||||||
|
@ -34,7 +32,7 @@ window.addEventListener('contextmenu', function (e) {
|
||||||
어플리케이션 메뉴를 만듭니다:
|
어플리케이션 메뉴를 만듭니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var template = [
|
const template = [
|
||||||
{
|
{
|
||||||
label: 'Edit',
|
label: 'Edit',
|
||||||
submenu: [
|
submenu: [
|
||||||
|
@ -79,33 +77,32 @@ var template = [
|
||||||
{
|
{
|
||||||
label: 'Reload',
|
label: 'Reload',
|
||||||
accelerator: 'CmdOrCtrl+R',
|
accelerator: 'CmdOrCtrl+R',
|
||||||
click: function(item, focusedWindow) {
|
click: (item, focusedWindow) => {
|
||||||
if (focusedWindow)
|
if (focusedWindow) focusedWindow.reload();
|
||||||
focusedWindow.reload();
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Toggle Full Screen',
|
label: 'Toggle Full Screen',
|
||||||
accelerator: (function() {
|
accelerator: (() => {
|
||||||
if (process.platform == 'darwin')
|
if (process.platform === 'darwin')
|
||||||
return 'Ctrl+Command+F';
|
return 'Ctrl+Command+F';
|
||||||
else
|
else
|
||||||
return 'F11';
|
return 'F11';
|
||||||
})(),
|
})(),
|
||||||
click: function(item, focusedWindow) {
|
click: (item, focusedWindow) => {
|
||||||
if (focusedWindow)
|
if (focusedWindow)
|
||||||
focusedWindow.setFullScreen(!focusedWindow.isFullScreen());
|
focusedWindow.setFullScreen(!focusedWindow.isFullScreen());
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Toggle Developer Tools',
|
label: 'Toggle Developer Tools',
|
||||||
accelerator: (function() {
|
accelerator: (() => {
|
||||||
if (process.platform == 'darwin')
|
if (process.platform == 'darwin')
|
||||||
return 'Alt+Command+I';
|
return 'Alt+Command+I';
|
||||||
else
|
else
|
||||||
return 'Ctrl+Shift+I';
|
return 'Ctrl+Shift+I';
|
||||||
})(),
|
})(),
|
||||||
click: function(item, focusedWindow) {
|
click: (item, focusedWindow) => {
|
||||||
if (focusedWindow)
|
if (focusedWindow)
|
||||||
focusedWindow.webContents.toggleDevTools();
|
focusedWindow.webContents.toggleDevTools();
|
||||||
}
|
}
|
||||||
|
@ -134,14 +131,14 @@ var template = [
|
||||||
submenu: [
|
submenu: [
|
||||||
{
|
{
|
||||||
label: 'Learn More',
|
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') {
|
if (process.platform === 'darwin') {
|
||||||
var name = require('electron').remote.app.getName();
|
const name = require('electron').remote.app.getName();
|
||||||
template.unshift({
|
template.unshift({
|
||||||
label: name,
|
label: name,
|
||||||
submenu: [
|
submenu: [
|
||||||
|
@ -180,7 +177,7 @@ if (process.platform == 'darwin') {
|
||||||
{
|
{
|
||||||
label: 'Quit',
|
label: 'Quit',
|
||||||
accelerator: 'Command+Q',
|
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);
|
Menu.setApplicationMenu(menu);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -9,15 +9,15 @@ Electron은 파일 경로 또는 `nativeImage` 인스턴스를 통해 이미지
|
||||||
전달하여 이미지를 사용할 수 있습니다:
|
전달하여 이미지를 사용할 수 있습니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var appIcon = new Tray('/Users/somebody/images/icon.png');
|
const appIcon = new Tray('/Users/somebody/images/icon.png');
|
||||||
var window = new BrowserWindow({icon: '/Users/somebody/images/window.png'});
|
let window = new BrowserWindow({icon: '/Users/somebody/images/window.png'});
|
||||||
```
|
```
|
||||||
|
|
||||||
이 예시는 클립보드로부터 가져온 `nativeImage`로 트레이 메뉴를 생성합니다:
|
이 예시는 클립보드로부터 가져온 `nativeImage`로 트레이 메뉴를 생성합니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var image = clipboard.readImage();
|
const image = clipboard.readImage();
|
||||||
var appIcon = new Tray(image);
|
const appIcon = new Tray(image);
|
||||||
```
|
```
|
||||||
|
|
||||||
## 지원하는 포맷
|
## 지원하는 포맷
|
||||||
|
|
|
@ -10,8 +10,8 @@
|
||||||
```javascript
|
```javascript
|
||||||
var app = require('app');
|
var app = require('app');
|
||||||
|
|
||||||
app.on('ready', function() {
|
app.on('ready', () => {
|
||||||
require('electron').powerMonitor.on('suspend', function() {
|
require('electron').powerMonitor.on('suspend', () => {
|
||||||
console.log('절전모드로 진입합니다!');
|
console.log('절전모드로 진입합니다!');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -5,9 +5,9 @@
|
||||||
예시:
|
예시:
|
||||||
|
|
||||||
```javascript
|
```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));
|
console.log(powerSaveBlocker.isStarted(id));
|
||||||
|
|
||||||
powerSaveBlocker.stop(id);
|
powerSaveBlocker.stop(id);
|
||||||
|
|
|
@ -29,8 +29,8 @@ Electron 내부 초기화 스크립트의 로드가 완료되고, 웹 페이지
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// preload.js
|
// preload.js
|
||||||
var _setImmediate = setImmediate;
|
const _setImmediate = setImmediate;
|
||||||
var _clearImmediate = clearImmediate;
|
const _clearImmediate = clearImmediate;
|
||||||
process.once('loaded', function() {
|
process.once('loaded', function() {
|
||||||
global.setImmediate = _setImmediate;
|
global.setImmediate = _setImmediate;
|
||||||
global.clearImmediate = _clearImmediate;
|
global.clearImmediate = _clearImmediate;
|
||||||
|
|
|
@ -5,19 +5,18 @@
|
||||||
다음 예시는 `file://` 프로토콜과 비슷한 일을 하는 커스텀 프로토콜을 설정합니다:
|
다음 예시는 `file://` 프로토콜과 비슷한 일을 하는 커스텀 프로토콜을 설정합니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const electron = require('electron');
|
const {app, protocol} = require('electron')
|
||||||
const { app, protocol } = electron;
|
const path = require('path')
|
||||||
const path = require('path');
|
|
||||||
|
|
||||||
app.on('ready', function () {
|
app.on('ready', function () {
|
||||||
protocol.registerFileProtocol('atom', function (request, callback) {
|
protocol.registerFileProtocol('atom', function (request, callback) {
|
||||||
var url = request.url.substr(7);
|
const url = request.url.substr(7)
|
||||||
callback({path: path.normalize(__dirname + '/' + url)});
|
callback({path: path.normalize(__dirname + '/' + url)})
|
||||||
}, function (error) {
|
}, function (error) {
|
||||||
if (error)
|
if (error)
|
||||||
console.error('Failed to register protocol')
|
console.error('Failed to register protocol')
|
||||||
});
|
})
|
||||||
});
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
**참고:** 모든 메서드는 따로 표기하지 않는 한 `app` 모듈의 `ready` 이벤트가 발생한
|
**참고:** 모든 메서드는 따로 표기하지 않는 한 `app` 모듈의 `ready` 이벤트가 발생한
|
||||||
|
@ -31,10 +30,33 @@ app.on('ready', function() {
|
||||||
|
|
||||||
* `schemes` Array - 표준 스킴으로 등록할 커스텀 스킴 리스트
|
* `schemes` Array - 표준 스킴으로 등록할 커스텀 스킴 리스트
|
||||||
|
|
||||||
표준 `scheme`의 형식은 RFC 3986 [일반 URI 구문](https://tools.ietf.org/html/rfc3986#section-3)
|
표준 스킴의 형식은 RFC 3986 [일반 URI 문법](https://tools.ietf.org/html/rfc3986#section-3)
|
||||||
표준을 따릅니다. 이 형식은 `file:`, `filesystem:`, `http` 등을 포함합니다. 스킴을
|
표준을 따릅니다. 예를 들어 `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` 이벤트가 발생하기 이전에만 사용할 수
|
**참고:** 이 메서드는 `app` 모듈의 `ready` 이벤트가 발생하기 이전에만 사용할 수
|
||||||
있습니다.
|
있습니다.
|
||||||
|
@ -94,9 +116,9 @@ The `uploadData` is an array of `data` objects:
|
||||||
예시:
|
예시:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
protocol.registerBufferProtocol('atom', function(request, callback) {
|
protocol.registerBufferProtocol('atom', (request, callback) => {
|
||||||
callback({mimeType: 'text/html', data: new Buffer('<h5>Response</h5>')});
|
callback({mimeType: 'text/html', data: new Buffer('<h5>Response</h5>')});
|
||||||
}, function (error) {
|
}, (error) => {
|
||||||
if (error)
|
if (error)
|
||||||
console.error('Failed to register protocol')
|
console.error('Failed to register protocol')
|
||||||
});
|
});
|
||||||
|
|
|
@ -14,8 +14,7 @@ inter-process 통신을 하지 않고도 간단한 API를 통해 직접 메인
|
||||||
다음 예시는 렌더러 프로세스에서 브라우저 창을 만드는 예시입니다:
|
다음 예시는 렌더러 프로세스에서 브라우저 창을 만드는 예시입니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const remote = require('electron').remote;
|
const { BrowserWindow } = require('electron').remote;
|
||||||
const BrowserWindow = remote.BrowserWindow;
|
|
||||||
|
|
||||||
var win = new BrowserWindow({ width: 800, height: 600 });
|
var win = new BrowserWindow({ width: 800, height: 600 });
|
||||||
win.loadURL('https://github.com');
|
win.loadURL('https://github.com');
|
||||||
|
@ -57,7 +56,7 @@ Remote 객체가 GC 되려면 대응하는 메인 프로세스 내부 객체의
|
||||||
받을 수 있습니다. 하지만 이 작업은 반드시 주의를 기울여 사용해야 합니다.
|
받을 수 있습니다. 하지만 이 작업은 반드시 주의를 기울여 사용해야 합니다.
|
||||||
|
|
||||||
첫째, 데드락을 피하기 위해 메인 프로세스로 전달된 콜백들은 비동기로 호출됩니다. 이러한
|
첫째, 데드락을 피하기 위해 메인 프로세스로 전달된 콜백들은 비동기로 호출됩니다. 이러한
|
||||||
이유로 메인 프로세스로 전달된 콜백들의 반환 값을 내부 함수에서 언제나 정상적으로 받을
|
이유로 메인 프로세스에 전달된 콜백의 반환 값을 내부 함수에서 언제나 정상적으로 받을
|
||||||
것이라고 예측해선 안됩니다.
|
것이라고 예측해선 안됩니다.
|
||||||
|
|
||||||
예를 들어 메인 프로세스에서 `Array.map` 같은 메서드를 사용할 때 렌더러 프로세스에서
|
예를 들어 메인 프로세스에서 `Array.map` 같은 메서드를 사용할 때 렌더러 프로세스에서
|
||||||
|
@ -65,54 +64,50 @@ Remote 객체가 GC 되려면 대응하는 메인 프로세스 내부 객체의
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// mapNumbers.js 메인 프로세스
|
// mapNumbers.js 메인 프로세스
|
||||||
exports.withRendererCallback = function(mapper) {
|
exports.withRendererCallback = (mapper) => {
|
||||||
return [1,2,3].map(mapper);
|
return [1,2,3].map(mapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.withLocalCallback = function() {
|
exports.withLocalCallback = () => {
|
||||||
return exports.mapNumbers(function(x) {
|
return exports.mapNumbers(x => x + 1);
|
||||||
return x + 1;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// 렌더러 프로세스
|
// 렌더러 프로세스
|
||||||
var mapNumbers = require("remote").require("./mapNumbers");
|
const mapNumbers = require("remote").require("./mapNumbers");
|
||||||
|
|
||||||
var withRendererCb = mapNumbers.withRendererCallback(function(x) {
|
const withRendererCb = mapNumbers.withRendererCallback(x => x + 1);
|
||||||
return x + 1;
|
|
||||||
})
|
|
||||||
|
|
||||||
var withLocalCb = mapNumbers.withLocalCallback()
|
const withLocalCb = mapNumbers.withLocalCallback()
|
||||||
|
|
||||||
console.log(withRendererCb, withLocalCb) // [true, true, true], [2, 3, 4]
|
console.log(withRendererCb, withLocalCb) // [true, true, true], [2, 3, 4]
|
||||||
```
|
```
|
||||||
|
|
||||||
보다시피 렌더러 콜백의 동기 반환 값은 예상되지 않은 처리입니다.
|
보다시피 동기적인 렌더러 콜백 함수의 반환 값은 예상되지 않은 값입니다. 그리고 메인
|
||||||
그리고 메인 프로세스에서 처리한 함수의 반환 값과 일치하지 않습니다.
|
프로세스에서 처리한 함수의 반환 값과 일치하지 않습니다.
|
||||||
|
|
||||||
둘째, 콜백들은 메인 프로세스로 전달, 호출된 이후에도 자동으로 함수의 참조가 릴리즈 되지
|
둘째, 콜백들은 메인 프로세스로 전달, 호출된 이후에도 자동으로 함수의 참조가 릴리즈 되지
|
||||||
않습니다. 함수 참조는 메인 프로세스에서 GC가 일어나기 전까지 계속 프로세스에 남아있게
|
않습니다. 함수 참조는 메인 프로세스에서 GC가 일어나기 전까지 계속 프로세스에 남아있게
|
||||||
됩니다.
|
됩니다.
|
||||||
|
|
||||||
다음 코드를 보면 느낌이 올 것입니다. 이 예시는 remote 객체에 `close` 이벤트 콜백을
|
다음 코드를 보면 느낌이 올 것입니다. 이 예시는 remote 객체에 `close` 이벤트 콜백을
|
||||||
설치합니다:
|
등록합니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var remote = require('remote');
|
const remote = require('remote');
|
||||||
|
|
||||||
remote.getCurrentWindow().on('close', function() {
|
remote.getCurrentWindow().on('close', () => {
|
||||||
// blabla...
|
// blabla...
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
하지만 이 코드 처럼 이벤트를 명시적으로 제거하지 않는 이상 콜백 함수의 참조가 계속해서
|
하지만 이 코드와 같이 등록된 이벤트는 명시적으로 제거하지 않는 이상 콜백 함수의 참조가
|
||||||
메인 프로세스에 남아있게 됩니다. 만약 명시적으로 콜백을 제거하지 않으면 매 번 창을
|
계속해서 메인 프로세스에 남아있게 됩니다. 만약 명시적으로 콜백을 제거하지 않으면 매 번
|
||||||
새로고침 할 때마다 콜백을 새로 설치합니다. 게다가 이전 콜백이 제거되지 않고 계속해서
|
창을 새로고침 할 때마다 콜백을 새로 설치합니다. 게다가 이전 콜백이 제거되지 않고
|
||||||
쌓이면서 메모리 누수가 발생합니다.
|
계속해서 쌓이면서 메모리 누수가 발생합니다.
|
||||||
|
|
||||||
설상가상으로 이전에 설치된 콜백의 콘텍스트가 릴리즈 되고 난 후(예: 페이지 새로고침)
|
설상가상으로 이전에 등록된 콜백의 콘텍스트가 릴리즈 되고 난 후 (e.g. 페이지 새로고침)
|
||||||
`close` 이벤트가 발생하면 예외가 발생하고 메인 프로세스가 작동 중지됩니다.
|
`close` 이벤트가 발생하면 예외가 발생하고 메인 프로세스가 작동 중지됩니다.
|
||||||
|
|
||||||
이러한 문제를 피하려면 렌더러 프로세스에서 메인 프로세스로 넘긴 함수의 참조를 사용 후
|
이러한 문제를 피하려면 렌더러 프로세스에서 메인 프로세스로 넘긴 함수의 참조를 사용 후
|
||||||
|
|
|
@ -16,31 +16,28 @@
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const electron = require('electron');
|
const electron = require('electron');
|
||||||
const app = electron.app;
|
const { app, BrowserWindow } = electron;
|
||||||
const BrowserWindow = electron.BrowserWindow;
|
|
||||||
|
|
||||||
var mainWindow;
|
let mainWindow;
|
||||||
|
|
||||||
app.on('ready', function() {
|
app.on('ready', () => {
|
||||||
var electronScreen = electron.screen;
|
const { width, height } = electron.screen.getPrimaryDisplay().workAreaSize;
|
||||||
var size = electronScreen.getPrimaryDisplay().workAreaSize;
|
mainWindow = new BrowserWindow({ width, height });
|
||||||
mainWindow = new BrowserWindow({ width: size.width, height: size.height });
|
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
다음 예시는 확장 디스플레이에 윈도우를 생성합니다:
|
다음 예시는 확장 디스플레이에 윈도우를 생성합니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var app = require('app');
|
const electron = require('electron');
|
||||||
var BrowserWindow = require('browser-window');
|
const { screen: electronScreen, app, BrowserWindow } = electron;
|
||||||
|
|
||||||
var mainWindow;
|
let mainWindow;
|
||||||
|
|
||||||
app.on('ready', function() {
|
app.on('ready', () => {
|
||||||
var electronScreen = require('screen');
|
let displays = electronScreen.getAllDisplays();
|
||||||
var displays = electronScreen.getAllDisplays();
|
let externalDisplay = null;
|
||||||
var externalDisplay = null;
|
for (let i in displays) {
|
||||||
for (var i in displays) {
|
|
||||||
if (displays[i].bounds.x != 0 || displays[i].bounds.y != 0) {
|
if (displays[i].bounds.x != 0 || displays[i].bounds.y != 0) {
|
||||||
externalDisplay = displays[i];
|
externalDisplay = displays[i];
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -8,12 +8,12 @@
|
||||||
[`webContents`](web-contents.md)에서 `session` 속성으로 접근할 수도 있습니다.
|
[`webContents`](web-contents.md)에서 `session` 속성으로 접근할 수도 있습니다.
|
||||||
|
|
||||||
```javascript
|
```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");
|
win.loadURL("http://github.com");
|
||||||
|
|
||||||
var ses = win.webContents.session;
|
const ses = win.webContents.session;
|
||||||
```
|
```
|
||||||
|
|
||||||
## Methods
|
## Methods
|
||||||
|
@ -46,7 +46,7 @@ var ses = win.webContents.session;
|
||||||
```javascript
|
```javascript
|
||||||
const session = require('electron').session;
|
const session = require('electron').session;
|
||||||
|
|
||||||
var ses = session.fromPartition('persist:name');
|
const ses = session.fromPartition('persist:name');
|
||||||
```
|
```
|
||||||
|
|
||||||
### Instance Events
|
### Instance Events
|
||||||
|
@ -65,9 +65,9 @@ Electron의 `webContents`에서 `item`을 다운로드할 때 발생하는 이
|
||||||
틱부터 `item`을 사용할 수 없게 됩니다.
|
틱부터 `item`을 사용할 수 없게 됩니다.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
session.defaultSession.on('will-download', function(event, item, webContents) {
|
session.defaultSession.on('will-download', (event, item, webContents) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
require('request')(item.getURL(), function(data) {
|
require('request')(item.getURL(), (data) => {
|
||||||
require('fs').writeFileSync('/somewhere', data);
|
require('fs').writeFileSync('/somewhere', data);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -84,19 +84,19 @@ session.defaultSession.on('will-download', function(event, item, webContents) {
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// 모든 쿠키를 요청합니다.
|
// 모든 쿠키를 요청합니다.
|
||||||
session.defaultSession.cookies.get({}, function(error, cookies) {
|
session.defaultSession.cookies.get({}, (error, cookies) => {
|
||||||
console.log(cookies);
|
console.log(cookies);
|
||||||
});
|
});
|
||||||
|
|
||||||
// url에 관련된 쿠키를 모두 가져옵니다.
|
// 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);
|
console.log(cookies);
|
||||||
});
|
});
|
||||||
|
|
||||||
// 지정한 쿠키 데이터를 설정합니다.
|
// 지정한 쿠키 데이터를 설정합니다.
|
||||||
// 동일한 쿠키가 있으면 해당 쿠키를 덮어씁니다.
|
// 동일한 쿠키가 있으면 해당 쿠키를 덮어씁니다.
|
||||||
var cookie = { url : "http://www.github.com", name : "dummy_name", value : "dummy" };
|
const cookie = { url : "http://www.github.com", name : "dummy_name", value : "dummy" };
|
||||||
session.defaultSession.cookies.set(cookie, function(error) {
|
session.defaultSession.cookies.set(cookie, (error) => {
|
||||||
if (error)
|
if (error)
|
||||||
console.error(error);
|
console.error(error);
|
||||||
});
|
});
|
||||||
|
@ -284,8 +284,8 @@ window.webContents.session.enableNetworkEmulation({offline: true});
|
||||||
`setCertificateVerifyProc(null)`을 호출하면 기본 검증 프로세스로 되돌립니다.
|
`setCertificateVerifyProc(null)`을 호출하면 기본 검증 프로세스로 되돌립니다.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
myWindow.webContents.session.setCertificateVerifyProc(function(hostname, cert, callback) {
|
myWindow.webContents.session.setCertificateVerifyProc((hostname, cert, callback) => {
|
||||||
if (hostname == 'github.com')
|
if (hostname === 'github.com')
|
||||||
callback(true);
|
callback(true);
|
||||||
else
|
else
|
||||||
callback(false);
|
callback(false);
|
||||||
|
@ -304,9 +304,9 @@ myWindow.webContents.session.setCertificateVerifyProc(function(hostname, cert, c
|
||||||
호출하면 권한 제공을 거부합니다.
|
호출하면 권한 제공을 거부합니다.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
session.fromPartition(partition).setPermissionRequestHandler(function(webContents, permission, callback) {
|
session.fromPartition(partition).setPermissionRequestHandler((webContents, permission, callback) => {
|
||||||
if (webContents.getURL() === host) {
|
if (webContents.getURL() === host) {
|
||||||
if (permission == "notifications") {
|
if (permission === "notifications") {
|
||||||
callback(false); // 거부됨.
|
callback(false); // 거부됨.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -340,11 +340,11 @@ session.fromPartition(partition).setPermissionRequestHandler(function(webContent
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// 다음 url에 대한 User Agent를 조작합니다.
|
// 다음 url에 대한 User Agent를 조작합니다.
|
||||||
var filter = {
|
const filter = {
|
||||||
urls: ["https://*.github.com/*", "*://electron.github.io"]
|
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";
|
details.requestHeaders['User-Agent'] = "MyAgent";
|
||||||
callback({cancel: false, requestHeaders: details.requestHeaders});
|
callback({cancel: false, requestHeaders: details.requestHeaders});
|
||||||
});
|
});
|
||||||
|
|
|
@ -7,7 +7,8 @@
|
||||||
다음 예시는 설정된 URL을 유저의 기본 브라우저로 엽니다:
|
다음 예시는 설정된 URL을 유저의 기본 브라우저로 엽니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const shell = require('electron').shell;
|
const { shell } = require('electron');
|
||||||
|
|
||||||
shell.openExternal('https://github.com');
|
shell.openExternal('https://github.com');
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -18,13 +18,11 @@ node 모듈을 완벽하게 지원합니다. ([네이티브 모듈](../tutorial/
|
||||||
메인 프로세스 스크립트는 일반 Node.js 스크립트와 비슷합니다:
|
메인 프로세스 스크립트는 일반 Node.js 스크립트와 비슷합니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const electron = require('electron');
|
const { app, BrowserWindow } = require('electron');
|
||||||
const app = electron.app;
|
|
||||||
const BrowserWindow = electron.BrowserWindow;
|
|
||||||
|
|
||||||
var window = null;
|
let window = null;
|
||||||
|
|
||||||
app.on('ready', function() {
|
app.on('ready', () => {
|
||||||
window = new BrowserWindow({width: 800, height: 600});
|
window = new BrowserWindow({width: 800, height: 600});
|
||||||
window.loadURL('https://github.com');
|
window.loadURL('https://github.com');
|
||||||
});
|
});
|
||||||
|
@ -38,7 +36,7 @@ app.on('ready', function() {
|
||||||
<html>
|
<html>
|
||||||
<body>
|
<body>
|
||||||
<script>
|
<script>
|
||||||
const remote = require('electron').remote;
|
const { remote } = require('electron');
|
||||||
console.log(remote.app.getVersion());
|
console.log(remote.app.getVersion());
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
@ -50,15 +48,28 @@ app.on('ready', function() {
|
||||||
|
|
||||||
## 분리 할당
|
## 분리 할당
|
||||||
|
|
||||||
만약 CoffeeScript나 Babel을 사용하고 있다면, 빌트인 모듈을 사용할 때
|
0.37 버전부터, [분리 할당][destructuring-assignment]을 통해 빌트인 모듈을 더
|
||||||
[분리 할당][destructuring-assignment]을 통해 직관적으로 사용할 수 있습니다:
|
직관적으로 사용할 수 있습니다:
|
||||||
|
|
||||||
```javascript
|
```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;
|
||||||
|
```
|
||||||
|
|
||||||
## 이전 스타일의 빌트인 모듈 비활성화
|
## 이전 스타일의 빌트인 모듈 비활성화
|
||||||
|
|
||||||
|
|
|
@ -3,15 +3,12 @@
|
||||||
> 아이콘과 컨텍스트 메뉴를 시스템 알림 영역에 추가합니다.
|
> 아이콘과 컨텍스트 메뉴를 시스템 알림 영역에 추가합니다.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const electron = require('electron');
|
const { app, Menu, Tray } = require('electron');
|
||||||
const app = electron.app;
|
|
||||||
const Menu = electron.Menu;
|
|
||||||
const Tray = electron.Tray;
|
|
||||||
|
|
||||||
var appIcon = null;
|
let appIcon = null;
|
||||||
app.on('ready', function(){
|
app.on('ready', () => {
|
||||||
appIcon = new Tray('/path/to/my/icon'); // 현재 어플리케이션 디렉터리를 기준으로 하려면 `__dirname + '/images/tray.png'` 형식으로 입력해야 합니다.
|
appIcon = new Tray('/path/to/my/icon'); // 현재 어플리케이션 디렉터리를 기준으로 하려면 `__dirname + '/images/tray.png'` 형식으로 입력해야 합니다.
|
||||||
var contextMenu = Menu.buildFromTemplate([
|
const contextMenu = Menu.buildFromTemplate([
|
||||||
{ label: 'Item1', type: 'radio' },
|
{ label: 'Item1', type: 'radio' },
|
||||||
{ label: 'Item2', type: 'radio' },
|
{ label: 'Item2', type: 'radio' },
|
||||||
{ label: 'Item3', type: 'radio', checked: true },
|
{ label: 'Item3', type: 'radio', checked: true },
|
||||||
|
@ -20,7 +17,6 @@ app.on('ready', function(){
|
||||||
appIcon.setToolTip('이것은 나의 어플리케이션 입니다!');
|
appIcon.setToolTip('이것은 나의 어플리케이션 입니다!');
|
||||||
appIcon.setContextMenu(contextMenu);
|
appIcon.setContextMenu(contextMenu);
|
||||||
});
|
});
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
__플랫폼별 한계:__
|
__플랫폼별 한계:__
|
||||||
|
|
|
@ -8,12 +8,12 @@
|
||||||
접근하는 예시입니다:
|
접근하는 예시입니다:
|
||||||
|
|
||||||
```javascript
|
```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");
|
win.loadURL("http://github.com");
|
||||||
|
|
||||||
var webContents = win.webContents;
|
let webContents = win.webContents;
|
||||||
```
|
```
|
||||||
|
|
||||||
## Events
|
## Events
|
||||||
|
@ -388,10 +388,10 @@ webContents.loadURL(url, options)
|
||||||
현재 웹 페이지의 URL을 반환합니다.
|
현재 웹 페이지의 URL을 반환합니다.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var win = new BrowserWindow({width: 800, height: 600});
|
let win = new BrowserWindow({width: 800, height: 600});
|
||||||
win.loadURL("http://github.com");
|
win.loadURL("http://github.com");
|
||||||
|
|
||||||
var currentURL = win.webContents.getURL();
|
let currentURL = win.webContents.getURL();
|
||||||
```
|
```
|
||||||
|
|
||||||
### `webContents.getTitle()`
|
### `webContents.getTitle()`
|
||||||
|
@ -654,22 +654,22 @@ Chromium의 미리보기 프린팅 커스텀 설정을 이용하여 윈도우의
|
||||||
```
|
```
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const BrowserWindow = require('electron').BrowserWindow;
|
const { BrowserWindow } = require('electron');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
|
||||||
var win = new BrowserWindow({width: 800, height: 600});
|
let win = new BrowserWindow({width: 800, height: 600});
|
||||||
win.loadURL("http://github.com");
|
win.loadURL('http://github.com');
|
||||||
|
|
||||||
win.webContents.on("did-finish-load", function() {
|
win.webContents.on('did-finish-load', () => {
|
||||||
// Use default printing options
|
// 기본 프린트 옵션을 사용합니다
|
||||||
win.webContents.printToPDF({}, function(error, data) {
|
win.webContents.printToPDF({}, (error, data) => {
|
||||||
if (error) throw error;
|
if (error) throw error;
|
||||||
fs.writeFile("/tmp/print.pdf", data, function(error) {
|
fs.writeFile('/tmp/print.pdf', data, (error) => {
|
||||||
if (error)
|
if (error)
|
||||||
throw error;
|
throw error;
|
||||||
console.log("Write PDF successfully.");
|
console.log('Write PDF successfully.');
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -745,13 +745,14 @@ mainWindow.webContents.on('devtools-opened', function() {
|
||||||
메인 프로세스에서 렌더러 프로세스로 메시지를 보내는 예시 입니다:
|
메인 프로세스에서 렌더러 프로세스로 메시지를 보내는 예시 입니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// In the main process.
|
// 메인 프로세스에서.
|
||||||
var window = null;
|
let mainWindow = null;
|
||||||
app.on('ready', function() {
|
|
||||||
window = new BrowserWindow({width: 800, height: 600});
|
app.on('ready', () => {
|
||||||
window.loadURL('file://' + __dirname + '/index.html');
|
mainWindow = new BrowserWindow({width: 800, height: 600});
|
||||||
window.webContents.on('did-finish-load', function() {
|
mainWindow.loadURL(`file://${__dirname}/index.html`);
|
||||||
window.webContents.send('ping', 'whoooooooh!');
|
mainWindow.webContents.on('did-finish-load', () => {
|
||||||
|
mainWindow.webContents.send('ping', 'whoooooooh!');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
@ -761,8 +762,8 @@ app.on('ready', function() {
|
||||||
<html>
|
<html>
|
||||||
<body>
|
<body>
|
||||||
<script>
|
<script>
|
||||||
require('electron').ipcRenderer.on('ping', function(event, message) {
|
require('electron').ipcRenderer.on('ping', (event, message) => {
|
||||||
console.log(message); // Prints "whoooooooh!"
|
console.log(message); // "whoooooooh!" 출력
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
@ -878,8 +879,8 @@ Input `event`를 웹 페이지로 전송합니다.
|
||||||
```javascript
|
```javascript
|
||||||
win.loadURL('https://github.com');
|
win.loadURL('https://github.com');
|
||||||
|
|
||||||
win.webContents.on('did-finish-load', function() {
|
win.webContents.on('did-finish-load', () => {
|
||||||
win.webContents.savePage('/tmp/test.html', 'HTMLComplete', function(error) {
|
win.webContents.savePage('/tmp/test.html', 'HTMLComplete', (error) => {
|
||||||
if (!error)
|
if (!error)
|
||||||
console.log("Save page successfully");
|
console.log("Save page successfully");
|
||||||
});
|
});
|
||||||
|
@ -916,13 +917,13 @@ try {
|
||||||
console.log("Debugger attach failed : ", err);
|
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);
|
console.log("Debugger detached due to : ", reason);
|
||||||
});
|
});
|
||||||
|
|
||||||
win.webContents.debugger.on('message', function(event, method, params) {
|
win.webContents.debugger.on('message', (event, method, params) => {
|
||||||
if (method == "Network.requestWillBeSent") {
|
if (method === "Network.requestWillBeSent") {
|
||||||
if (params.request.url == "https://www.github.com")
|
if (params.request.url === "https://www.github.com")
|
||||||
win.webContents.debugger.detach();
|
win.webContents.debugger.detach();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
다음 예시는 현재 페이지를 200% 줌 합니다:
|
다음 예시는 현재 페이지를 200% 줌 합니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var webFrame = require('electron').webFrame;
|
const { webFrame } = require('electron');
|
||||||
|
|
||||||
webFrame.setZoomFactor(2);
|
webFrame.setZoomFactor(2);
|
||||||
```
|
```
|
||||||
|
|
|
@ -29,18 +29,20 @@
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<script>
|
<script>
|
||||||
onload = function() {
|
onload = () => {
|
||||||
var webview = document.getElementById("foo");
|
const webview = document.getElementById('foo');
|
||||||
var indicator = document.querySelector(".indicator");
|
const indicator = document.querySelector('.indicator');
|
||||||
|
|
||||||
var loadstart = function() {
|
const loadstart = () => {
|
||||||
indicator.innerText = "loading...";
|
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>
|
</script>
|
||||||
```
|
```
|
||||||
|
@ -205,7 +207,7 @@ API를 사용할 수 있습니다. 이를 지정하면 내부에서 로우레벨
|
||||||
**예시**
|
**예시**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
webview.addEventListener("dom-ready", function() {
|
webview.addEventListener("dom-ready", () => {
|
||||||
webview.openDevTools();
|
webview.openDevTools();
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
@ -631,10 +633,12 @@ Returns:
|
||||||
다음 예시 코드는 새 URL을 시스템의 기본 브라우저로 여는 코드입니다.
|
다음 예시 코드는 새 URL을 시스템의 기본 브라우저로 여는 코드입니다.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
webview.addEventListener('new-window', function(e) {
|
const { shell } = require('electron');
|
||||||
var protocol = require('url').parse(e.url).protocol;
|
|
||||||
|
webview.addEventListener('new-window', (e) => {
|
||||||
|
const protocol = require('url').parse(e.url).protocol;
|
||||||
if (protocol === 'http:' || protocol === 'https:') {
|
if (protocol === 'http:' || protocol === 'https:') {
|
||||||
require('electron').shell.openExternal(e.url);
|
shell.openExternal(e.url);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
@ -687,7 +691,7 @@ Returns:
|
||||||
이동시키는 예시입니다.
|
이동시키는 예시입니다.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
webview.addEventListener('close', function() {
|
webview.addEventListener('close', () => {
|
||||||
webview.src = 'about:blank';
|
webview.src = 'about:blank';
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
@ -706,7 +710,7 @@ Returns:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// In embedder page.
|
// In embedder page.
|
||||||
webview.addEventListener('ipc-message', function(event) {
|
webview.addEventListener('ipc-message', (event) => {
|
||||||
console.log(event.channel);
|
console.log(event.channel);
|
||||||
// Prints "pong"
|
// Prints "pong"
|
||||||
});
|
});
|
||||||
|
@ -715,8 +719,8 @@ webview.send('ping');
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// In guest page.
|
// In guest page.
|
||||||
var ipcRenderer = require('electron').ipcRenderer;
|
var { ipcRenderer } = require('electron');
|
||||||
ipcRenderer.on('ping', function() {
|
ipcRenderer.on('ping', () => {
|
||||||
ipcRenderer.sendToHost('pong');
|
ipcRenderer.sendToHost('pong');
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
|
@ -62,16 +62,16 @@ console.log(require('remote').getGlobal('sharedObject').someProperty);
|
||||||
만약 빠르게 고치고 싶다면, 다음과 같이 변수를 전역 변수로 만드는 방법이 있습니다:
|
만약 빠르게 고치고 싶다면, 다음과 같이 변수를 전역 변수로 만드는 방법이 있습니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
app.on('ready', function() {
|
app.on('ready', () => {
|
||||||
var tray = new Tray('/path/to/icon.png');
|
const tray = new Tray('/path/to/icon.png');
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
를 이렇게:
|
를 이렇게:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var tray = null;
|
let tray = null;
|
||||||
app.on('ready', function() {
|
app.on('ready', () => {
|
||||||
tray = new Tray('/path/to/icon.png');
|
tray = new Tray('/path/to/icon.png');
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
@ -86,7 +86,7 @@ Node.js가 Electron에 합쳐졌기 때문에, DOM에 `module`, `exports`, `requ
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// 메인 프로세스에서.
|
// 메인 프로세스에서.
|
||||||
var mainWindow = new BrowserWindow({
|
let mainWindow = new BrowserWindow({
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
nodeIntegration: false
|
nodeIntegration: false
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,8 +70,8 @@ require('/path/to/example.asar/dir/module.js');
|
||||||
`BrowserWindow` 클래스를 이용해 원하는 웹 페이지도 표시할 수 있습니다:
|
`BrowserWindow` 클래스를 이용해 원하는 웹 페이지도 표시할 수 있습니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const BrowserWindow = require('electron').BrowserWindow;
|
const { BrowserWindow } = require('electron');
|
||||||
var win = new BrowserWindow({width: 800, height: 600});
|
let 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');
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ win.loadURL('file:///path/to/example.asar/static/index.html');
|
||||||
```html
|
```html
|
||||||
<script>
|
<script>
|
||||||
var $ = require('./jquery.min.js');
|
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);
|
console.log(data);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -99,7 +99,7 @@ $.get('file:///path/to/example.asar/file.txt', function(data) {
|
||||||
읽어들입니다:
|
읽어들입니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var originalFs = require('original-fs');
|
const originalFs = require('original-fs');
|
||||||
originalFs.readFileSync('/path/to/example.asar');
|
originalFs.readFileSync('/path/to/example.asar');
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ Windows, Linux, OS X 운영체제 모두 기본적으로 어플리케이션에
|
||||||
**참고:** 이 API는 HTML5 API이기 때문에 렌더러 프로세스에서만 사용할 수 있습니다.
|
**참고:** 이 API는 HTML5 API이기 때문에 렌더러 프로세스에서만 사용할 수 있습니다.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var myNotification = new Notification('Title', {
|
let myNotification = new Notification('Title', {
|
||||||
body: 'Lorem Ipsum Dolor Sit Amet'
|
body: 'Lorem Ipsum Dolor Sit Amet'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -114,8 +114,8 @@ const electron = require('electron');
|
||||||
const app = electron.app;
|
const app = electron.app;
|
||||||
const Menu = electron.Menu;
|
const Menu = electron.Menu;
|
||||||
|
|
||||||
var dockMenu = Menu.buildFromTemplate([
|
const dockMenu = Menu.buildFromTemplate([
|
||||||
{ label: 'New Window', click: function() { console.log('New Window'); } },
|
{ label: 'New Window', click: () => { console.log('New Window'); } },
|
||||||
{ label: 'New Window with Settings', submenu: [
|
{ label: 'New Window with Settings', submenu: [
|
||||||
{ label: 'Basic' },
|
{ label: 'Basic' },
|
||||||
{ label: 'Pro'}
|
{ label: 'Pro'}
|
||||||
|
@ -203,24 +203,25 @@ __Windows Media Player의 미리보기 툴바:__
|
||||||
미리보기 툴바를 설정할 수 있습니다:
|
미리보기 툴바를 설정할 수 있습니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const BrowserWindow = require('electron').BrowserWindow;
|
const { BrowserWindow } = require('electron');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
|
||||||
var win = new BrowserWindow({
|
let win = new BrowserWindow({
|
||||||
width: 800,
|
width: 800,
|
||||||
height: 600
|
height: 600
|
||||||
});
|
});
|
||||||
|
|
||||||
win.setThumbarButtons([
|
win.setThumbarButtons([
|
||||||
{
|
{
|
||||||
tooltip: "button1",
|
tooltip: "button1",
|
||||||
icon: path.join(__dirname, 'button1.png'),
|
icon: path.join(__dirname, 'button1.png'),
|
||||||
click: function() { console.log("button2 clicked"); }
|
click: () => { console.log("button2 clicked"); }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
tooltip: "button2",
|
tooltip: "button2",
|
||||||
icon: path.join(__dirname, 'button2.png'),
|
icon: path.join(__dirname, 'button2.png'),
|
||||||
flags:['enabled', 'dismissonclick'],
|
flags:['enabled', 'dismissonclick'],
|
||||||
click: function() { console.log("button2 clicked."); }
|
click: () => { console.log("button2 clicked."); }
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
```
|
```
|
||||||
|
@ -259,7 +260,7 @@ __작업 표시줄 버튼의 프로그래스 바:__
|
||||||
있습니다:
|
있습니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var window = new BrowserWindow({...});
|
let window = new BrowserWindow({...});
|
||||||
window.setProgressBar(0.5);
|
window.setProgressBar(0.5);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -286,7 +287,7 @@ __작업 표시줄 버튼 위의 오버레이:__
|
||||||
API를 사용할 수 있습니다:
|
API를 사용할 수 있습니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var window = new BrowserWindow({...});
|
let window = new BrowserWindow({...});
|
||||||
window.setOverlayIcon('path/to/overlay.png', 'Description for overlay');
|
window.setOverlayIcon('path/to/overlay.png', 'Description for overlay');
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -305,7 +306,7 @@ __대표 파일 팝업 메뉴:__
|
||||||
[BrowserWindow.setDocumentEdited][setdocumentedited]를 사용할 수 있습니다:
|
[BrowserWindow.setDocumentEdited][setdocumentedited]를 사용할 수 있습니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var window = new BrowserWindow({...});
|
let window = new BrowserWindow({...});
|
||||||
window.setRepresentedFilename('/etc/passwd');
|
window.setRepresentedFilename('/etc/passwd');
|
||||||
window.setDocumentEdited(true);
|
window.setDocumentEdited(true);
|
||||||
```
|
```
|
||||||
|
|
|
@ -10,8 +10,9 @@ const electron = require('electron');
|
||||||
const app = electron.app;
|
const app = electron.app;
|
||||||
const BrowserWindow = electron.BrowserWindow;
|
const BrowserWindow = electron.BrowserWindow;
|
||||||
|
|
||||||
var onlineStatusWindow;
|
let onlineStatusWindow;
|
||||||
app.on('ready', function() {
|
|
||||||
|
app.on('ready', () => {
|
||||||
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false });
|
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false });
|
||||||
onlineStatusWindow.loadURL('file://' + __dirname + '/online-status.html');
|
onlineStatusWindow.loadURL('file://' + __dirname + '/online-status.html');
|
||||||
});
|
});
|
||||||
|
@ -24,7 +25,7 @@ _online-status.html_
|
||||||
<html>
|
<html>
|
||||||
<body>
|
<body>
|
||||||
<script>
|
<script>
|
||||||
var alertOnlineStatus = function() {
|
const alertOnlineStatus = () => {
|
||||||
window.alert(navigator.onLine ? 'online' : 'offline');
|
window.alert(navigator.onLine ? 'online' : 'offline');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -52,13 +53,14 @@ const app = electron.app;
|
||||||
const ipcMain = electron.ipcMain;
|
const ipcMain = electron.ipcMain;
|
||||||
const BrowserWindow = electron.BrowserWindow;
|
const BrowserWindow = electron.BrowserWindow;
|
||||||
|
|
||||||
var onlineStatusWindow;
|
let onlineStatusWindow;
|
||||||
app.on('ready', function() {
|
|
||||||
|
app.on('ready', () => {
|
||||||
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false });
|
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);
|
console.log(status);
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
@ -70,8 +72,8 @@ _online-status.html_
|
||||||
<html>
|
<html>
|
||||||
<body>
|
<body>
|
||||||
<script>
|
<script>
|
||||||
const ipcRenderer = require('electron').ipcRenderer;
|
const { ipcRenderer } = require('electron');
|
||||||
var updateOnlineStatus = function() {
|
const updateOnlineStatus = () => {
|
||||||
ipcRenderer.send('online-status-changed', navigator.onLine ? 'online' : 'offline');
|
ipcRenderer.send('online-status-changed', navigator.onLine ? 'online' : 'offline');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -75,61 +75,60 @@ __알림__: 만약 `main` 필드가 `package.json`에 설정되어 있지 않으
|
||||||
다음과 같이 작성할 수 있습니다:
|
다음과 같이 작성할 수 있습니다:
|
||||||
|
|
||||||
```javascript
|
```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가 일어날 때 창이 멋대로 닫혀버립니다.
|
// 자바스크립트 GC가 일어날 때 창이 멋대로 닫혀버립니다.
|
||||||
let mainWindow
|
let mainWindow;
|
||||||
|
|
||||||
function createWindow () {
|
function createWindow () {
|
||||||
// 새로운 브라우저 창을 생성합니다.
|
// 새로운 브라우저 창을 생성합니다.
|
||||||
mainWindow = new BrowserWindow({width: 800, height: 600})
|
mainWindow = new BrowserWindow({width: 800, height: 600});
|
||||||
|
|
||||||
// 그리고 현재 디렉터리의 index.html을 로드합니다.
|
// 그리고 현재 디렉터리의 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의 초기화가 끝나면 실행되며 브라우저
|
// 이 메서드는 Electron의 초기화가 끝나면 실행되며 브라우저
|
||||||
// 윈도우를 생성할 수 있습니다. 몇몇 API는 이 이벤트 이후에만
|
// 윈도우를 생성할 수 있습니다. 몇몇 API는 이 이벤트 이후에만
|
||||||
// 사용할 수 있습니다.
|
// 사용할 수 있습니다.
|
||||||
app.on('ready', createWindow)
|
app.on('ready', createWindow);
|
||||||
|
|
||||||
// 모든 창이 닫히면 어플리케이션 종료.
|
// 모든 창이 닫히면 어플리케이션 종료.
|
||||||
app.on('window-all-closed', function () {
|
app.on('window-all-closed', () => {
|
||||||
// OS X의 대부분의 어플리케이션은 유저가 Cmd + Q 커맨드로 확실하게
|
// OS X의 대부분의 어플리케이션은 유저가 Cmd + Q 커맨드로 확실하게
|
||||||
// 종료하기 전까지 메뉴바에 남아 계속 실행됩니다.
|
// 종료하기 전까지 메뉴바에 남아 계속 실행됩니다.
|
||||||
if (process.platform !== 'darwin') {
|
if (process.platform !== 'darwin') {
|
||||||
app.quit()
|
app.quit();
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
|
||||||
app.on('activate', function () {
|
app.on('activate', () => {
|
||||||
// OS X에선 보통 독 아이콘이 클릭되고 나서도
|
// OS X에선 보통 독 아이콘이 클릭되고 나서도
|
||||||
// 열린 윈도우가 없으면, 새로운 윈도우를 다시 만듭니다.
|
// 열린 윈도우가 없으면, 새로운 윈도우를 다시 만듭니다.
|
||||||
if (mainWindow === null) {
|
if (mainWindow === null) {
|
||||||
createWindow()
|
createWindow();
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
|
||||||
// 이 파일엔 제작할 어플리케이션에 특화된 메인 프로세스 코드를
|
// 이 파일엔 제작할 어플리케이션에 특화된 메인 프로세스 코드를
|
||||||
// 포함할 수 있습니다. 또한 파일을 분리하여 require하는 방법으로
|
// 포함할 수 있습니다. 또한 파일을 분리하여 require하는 방법으로
|
||||||
// 코드를 작성할 수도 있습니다.
|
// 코드를 작성할 수도 있습니다.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
마지막으로, 사용자에게 보여줄 `index.html` 웹 페이지의 예시입니다:
|
마지막으로, 사용자에게 보여줄 `index.html` 웹 페이지의 예시입니다:
|
||||||
|
|
|
@ -26,7 +26,7 @@ app.commandLine.appendSwitch('ppapi-flash-path', '/path/to/libpepflashplayer.so'
|
||||||
// 선택적인으로 플래시 플레이어의 버전을 설정합니다. 예시로는, v17.0.0.169
|
// 선택적인으로 플래시 플레이어의 버전을 설정합니다. 예시로는, 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', () => {
|
||||||
mainWindow = new BrowserWindow({
|
mainWindow = new BrowserWindow({
|
||||||
width: 800,
|
width: 800,
|
||||||
height: 600,
|
height: 600,
|
||||||
|
@ -34,7 +34,7 @@ app.on('ready', function() {
|
||||||
plugins: true
|
plugins: true
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
mainWindow.loadURL('file://' + __dirname + '/index.html');
|
mainWindow.loadURL(`file://${__dirname}/index.html`);
|
||||||
// 이외의 코드
|
// 이외의 코드
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
|
@ -42,7 +42,7 @@ $ npm install selenium-webdriver
|
||||||
```javascript
|
```javascript
|
||||||
const webdriver = require('selenium-webdriver');
|
const webdriver = require('selenium-webdriver');
|
||||||
|
|
||||||
var driver = new webdriver.Builder()
|
const driver = new webdriver.Builder()
|
||||||
// 작동하고 있는 크롬 드라이버의 포트 "9515"를 사용합니다.
|
// 작동하고 있는 크롬 드라이버의 포트 "9515"를 사용합니다.
|
||||||
.usingServer('http://localhost:9515')
|
.usingServer('http://localhost:9515')
|
||||||
.withCapabilities({
|
.withCapabilities({
|
||||||
|
@ -57,8 +57,8 @@ var driver = new webdriver.Builder()
|
||||||
driver.get('http://www.google.com');
|
driver.get('http://www.google.com');
|
||||||
driver.findElement(webdriver.By.name('q')).sendKeys('webdriver');
|
driver.findElement(webdriver.By.name('q')).sendKeys('webdriver');
|
||||||
driver.findElement(webdriver.By.name('btnG')).click();
|
driver.findElement(webdriver.By.name('btnG')).click();
|
||||||
driver.wait(function() {
|
driver.wait(() => {
|
||||||
return driver.getTitle().then(function(title) {
|
return driver.getTitle().then((title) => {
|
||||||
return title === 'webdriver - Google Search';
|
return title === 'webdriver - Google Search';
|
||||||
});
|
});
|
||||||
}, 1000);
|
}, 1000);
|
||||||
|
@ -92,7 +92,7 @@ $ npm install webdriverio
|
||||||
### 3. 크롬 드라이버에 연결
|
### 3. 크롬 드라이버에 연결
|
||||||
```javascript
|
```javascript
|
||||||
const webdriverio = require('webdriverio');
|
const webdriverio = require('webdriverio');
|
||||||
var options = {
|
let options = {
|
||||||
host: "localhost", // localhost에서 작동중인 크롬 드라이버 서버를 사용합니다.
|
host: "localhost", // localhost에서 작동중인 크롬 드라이버 서버를 사용합니다.
|
||||||
port: 9515, // 연결할 크롬 드라이버 서버의 포트를 설정합니다.
|
port: 9515, // 연결할 크롬 드라이버 서버의 포트를 설정합니다.
|
||||||
desiredCapabilities: {
|
desiredCapabilities: {
|
||||||
|
@ -104,14 +104,14 @@ var options = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var client = webdriverio.remote(options);
|
let client = webdriverio.remote(options);
|
||||||
|
|
||||||
client
|
client
|
||||||
.init()
|
.init()
|
||||||
.url('http://google.com')
|
.url('http://google.com')
|
||||||
.setValue('#q', 'webdriverio')
|
.setValue('#q', 'webdriverio')
|
||||||
.click('#btnG')
|
.click('#btnG')
|
||||||
.getTitle().then(function(title) {
|
.getTitle().then((title) => {
|
||||||
console.log('Title was: ' + title);
|
console.log('Title was: ' + title);
|
||||||
})
|
})
|
||||||
.end();
|
.end();
|
||||||
|
|
|
@ -59,8 +59,8 @@ app.commandLine.appendSwitch('widevine-cdm-path', '/path/to/widevinecdmadapter.p
|
||||||
// 플러그인의 버전은 크롬의 `chrome://plugins` 페이지에서 취득할 수 있습니다.
|
// 플러그인의 버전은 크롬의 `chrome://plugins` 페이지에서 취득할 수 있습니다.
|
||||||
app.commandLine.appendSwitch('widevine-cdm-version', '1.4.8.866');
|
app.commandLine.appendSwitch('widevine-cdm-version', '1.4.8.866');
|
||||||
|
|
||||||
var mainWindow = null;
|
let mainWindow = null;
|
||||||
app.on('ready', function() {
|
app.on('ready', () => {
|
||||||
mainWindow = new BrowserWindow({
|
mainWindow = new BrowserWindow({
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
// `plugins`은 활성화되어야 합니다.
|
// `plugins`은 활성화되어야 합니다.
|
||||||
|
|
Loading…
Reference in a new issue