├── .gitignore ├── Chapter 1 ├── 10-ipc │ ├── index.html │ ├── index2.html │ ├── main.js │ ├── package-lock.json │ ├── package.json │ ├── renderer.js │ └── renderer2.js ├── 12-lazy-load │ ├── index.html │ ├── index.js │ └── package.json ├── 2-content-roadmap.png ├── 3-hello-electron │ ├── index.html │ ├── main.js │ └── package.json ├── 6-electron-setup.md ├── 8-pomodoro-demo │ ├── .tmp │ │ ├── main.js │ │ └── renderer.js │ ├── index.html │ ├── main.js │ ├── package.json │ ├── readme.md │ └── renderer.js └── 8-pomodoro-homework │ ├── index.html │ ├── main.js │ ├── package.json │ ├── readme.md │ └── renderer.js ├── Chapter 2 ├── 10-signal │ ├── index.js │ ├── package-lock.json │ └── package.json ├── 12-remote-control │ ├── app │ │ ├── main │ │ │ ├── index.js │ │ │ ├── ipc.js │ │ │ ├── robot.js │ │ │ ├── signal.js │ │ │ ├── trayAndMenu │ │ │ │ ├── darwin.js │ │ │ │ ├── icon_darwin.png │ │ │ │ ├── icon_darwin@2x.png │ │ │ │ ├── icon_win32.png │ │ │ │ ├── icon_win32@2x.png │ │ │ │ ├── index.js │ │ │ │ └── win32.js │ │ │ └── windows │ │ │ │ ├── about.js │ │ │ │ ├── control.js │ │ │ │ ├── icon.png │ │ │ │ └── main.js │ │ └── renderer │ │ │ ├── pages │ │ │ └── control │ │ │ │ ├── app.js │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ └── peer-control.js │ │ │ └── src │ │ │ └── main │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── config-overrides.js │ │ │ ├── package.json │ │ │ ├── public │ │ │ ├── favicon.ico │ │ │ ├── index.html │ │ │ ├── logo192.png │ │ │ ├── logo512.png │ │ │ ├── manifest.json │ │ │ └── robots.txt │ │ │ └── src │ │ │ ├── App.css │ │ │ ├── App.js │ │ │ ├── App.test.js │ │ │ ├── index.css │ │ │ ├── index.js │ │ │ ├── logo.svg │ │ │ ├── peer-puppet.js │ │ │ ├── serviceWorker.js │ │ │ └── setupTests.js │ └── package.json ├── 3-6-remote-control-local-mock │ ├── READMD.md │ ├── app │ │ ├── main │ │ │ ├── index.js │ │ │ ├── ipc.js │ │ │ ├── robot.js │ │ │ └── windows │ │ │ │ ├── control.js │ │ │ │ └── main.js │ │ └── renderer │ │ │ ├── pages │ │ │ └── control │ │ │ │ ├── app.js │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ ├── peer-control.js │ │ │ │ └── robot.js │ │ │ └── src │ │ │ └── main │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── config-overrides.js │ │ │ ├── package-lock.json │ │ │ ├── package.json │ │ │ ├── public │ │ │ ├── favicon.ico │ │ │ ├── index.html │ │ │ ├── logo192.png │ │ │ ├── logo512.png │ │ │ ├── manifest.json │ │ │ └── robots.txt │ │ │ └── src │ │ │ ├── App.css │ │ │ ├── App.js │ │ │ ├── App.test.js │ │ │ ├── index.css │ │ │ ├── index.js │ │ │ ├── logo.svg │ │ │ ├── serviceWorker.js │ │ │ └── setupTests.js │ ├── package-lock.json │ └── package.json ├── 4-robot-heart │ ├── READMD.md │ ├── index.html │ ├── main.js │ ├── package-lock.json │ ├── package.json │ └── renderer.js └── 7-11-remote-control │ ├── app │ ├── main │ │ ├── index.js │ │ ├── ipc.js │ │ ├── robot.js │ │ ├── signal.js │ │ └── windows │ │ │ ├── control.js │ │ │ └── main.js │ └── renderer │ │ ├── pages │ │ └── control │ │ │ ├── app.js │ │ │ ├── index.html │ │ │ ├── index.js │ │ │ ├── peer-control.js │ │ │ └── robot.js │ │ └── src │ │ └── main │ │ ├── .gitignore │ │ ├── README.md │ │ ├── config-overrides.js │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── public │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── logo192.png │ │ ├── logo512.png │ │ ├── manifest.json │ │ └── robots.txt │ │ └── src │ │ ├── App.css │ │ ├── App.js │ │ ├── App.test.js │ │ ├── index.css │ │ ├── index.js │ │ ├── logo.svg │ │ ├── peer-puppet.js │ │ ├── serviceWorker.js │ │ └── setupTests.js │ └── package.json ├── Chapter 3 ├── remote-control │ ├── .gitignore │ ├── app │ │ ├── main │ │ │ ├── crash-reporter.js │ │ │ ├── index.js │ │ │ ├── ipc.js │ │ │ ├── robot.js │ │ │ ├── signal.js │ │ │ ├── trayAndMenu │ │ │ │ ├── darwin.js │ │ │ │ ├── icon_darwin.png │ │ │ │ ├── icon_darwin@2x.png │ │ │ │ ├── icon_win32.png │ │ │ │ ├── icon_win32@2x.png │ │ │ │ ├── index.js │ │ │ │ └── win32.js │ │ │ ├── updater.js │ │ │ └── windows │ │ │ │ ├── about.js │ │ │ │ ├── control.js │ │ │ │ ├── icon.png │ │ │ │ └── main.js │ │ └── renderer │ │ │ ├── pages │ │ │ └── control │ │ │ │ ├── app.js │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ ├── peer-control.js │ │ │ │ └── robot.js │ │ │ └── src │ │ │ └── main │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── build.js │ │ │ ├── config-overrides.js │ │ │ ├── package.json │ │ │ ├── public │ │ │ ├── favicon.ico │ │ │ ├── index.html │ │ │ ├── logo192.png │ │ │ ├── logo512.png │ │ │ ├── manifest.json │ │ │ └── robots.txt │ │ │ └── src │ │ │ ├── App.css │ │ │ ├── App.js │ │ │ ├── App.test.js │ │ │ ├── index.css │ │ │ ├── index.js │ │ │ ├── logo.svg │ │ │ ├── peer-puppet.js │ │ │ ├── serviceWorker.js │ │ │ └── setupTests.js │ ├── package.json │ └── resources │ │ ├── background.png │ │ ├── background@2x.png │ │ ├── icon.icns │ │ ├── icon.ico │ │ └── icon.png └── updater-server │ ├── index.js │ ├── package.json │ └── public │ ├── Mercurius-1.0.1-full.nupkg │ ├── Mercurius-1.0.1-mac.zip │ └── RELEASES ├── PDF ├── Electron 基础篇.pdf ├── Electron 实战篇 .pdf └── Electron 工程篇.pdf ├── README.md ├── ROADMAP.md └── img ├── icon.ico ├── intro.jpeg └── qrcode.png /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | **/node_modules 3 | **/package-lock.json 4 | **/app/renderer/pages/main/ 5 | -------------------------------------------------------------------------------- /Chapter 1/10-ipc/index.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter 1/10-ipc/index2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Chapter 1/10-ipc/main.js: -------------------------------------------------------------------------------- 1 | const {app, BrowserWindow, Notification, ipcMain} = require('electron') 2 | 3 | let win 4 | let win2 5 | app.on('ready', () => { 6 | win = new BrowserWindow({ 7 | width: 300, 8 | height: 300, 9 | webPreferences: { 10 | nodeIntegration: true 11 | } 12 | }) 13 | win.loadFile('./index.html') 14 | 15 | win2 = new BrowserWindow({ 16 | width: 300, 17 | height: 300, 18 | webPreferences: { 19 | nodeIntegration: true 20 | } 21 | }) 22 | win2.loadFile('./index2.html') 23 | global.sharedObject = { 24 | win2WebContentsId: win2.webContents.id 25 | } 26 | setTimeout(handleIPC, 500) 27 | }) 28 | 29 | function handleIPC() { 30 | // ipcMain.on('do-some-work', function (e, a, b) { 31 | // // do some work 32 | // console.log('do-some-work', a,b) 33 | // }) 34 | 35 | // win.webContents.send('do-some-render-work') 36 | } 37 | -------------------------------------------------------------------------------- /Chapter 1/10-ipc/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ipc", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "electron": "^7.1.7" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Chapter 1/10-ipc/renderer.js: -------------------------------------------------------------------------------- 1 | const {ipcRenderer, remote} = require('electron') 2 | 3 | // ipcRenderer.send('do-some-work', 1,2) 4 | 5 | // ipcRenderer.on('do-some-render-work', () => { 6 | // alert('do some work') 7 | // }) 8 | let sharedObject = remote.getGlobal('sharedObject') 9 | let win2WebContentsId = sharedObject.win2WebContentsId 10 | 11 | ipcRenderer.sendTo(win2WebContentsId, 'do-some-work', 1) 12 | -------------------------------------------------------------------------------- /Chapter 1/10-ipc/renderer2.js: -------------------------------------------------------------------------------- 1 | const {ipcRenderer} = require('electron') 2 | ipcRenderer.on('do-some-work', (e, a) => { 3 | alert('renderer2 handle some work' + a) 4 | }) 5 | -------------------------------------------------------------------------------- /Chapter 1/12-lazy-load/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |抱歉,没有找到符合条件的结果ï 38 | 39 |