GitHub - electron/electron-quick-start: Clone to try a simple Electron app
GitHub - electron/electron-quick-start: Clone to try a simple Electron app
The last comment block of each slide will be treated as slide notes. It will be visible and editable in Presenter Mode along with the slide. Read more in the docs
GitHub - electron/electron-quick-start: Clone to try a simple Electron app
8113791cebec956796e5a10562b64fa965754f7e
最初期のコミットで、ファイルは2つ。(Node.js ではなく io.js を使用)
index.html の script
タグで io.js の process API をダイレクトに呼び出し。
<!DOCTYPE html> <html> <head> <title>Hello World!</title> </head> <body> <h1>Hello World!</h1> We are using io.js <script>document.write(process.version)</script> and Electron <script>document.write(process.versions['electron'])</script>. </body> </html>
<!DOCTYPE html> <html> <head> <title>Hello World!</title> </head> <body> <h1>Hello World!</h1> We are using io.js <script>document.write(process.version)</script> and Electron <script>document.write(process.versions['electron'])</script>. </body> </html>
fcc251352b84715b74be7ffff6cccf83eb796f91
Node.js に移行、package.json が追加された。
まだプロセスモデルが明確でなく、BrowserWindow に読み込まれた HTML の JavaScript でも Node.js API が使えるというユニークな開発環境のデモといった雰囲気。
Atom Editor v1.2 や VS Code v1.0 はこの頃リリースされていた。
1e287bdb624bb1a62362316994c226ba7d26f6a9
renderer.js が追加された。
1e287bdb624bb1a62362316994c226ba7d26f6a9
index.html のコメントに renderer process という言葉が出現。
<html> <body> <h1>Hello World!</h1> <!-- All of the Node.js APIs are available in this renderer process. --> We are using node <script>document.write(process.versions.node)</script>, Chromium <script>document.write(process.versions.chrome)</script>, and Electron <script>document.write(process.versions.electron)</script>. </body> <script> // You can also require other files to run in this process require('renderer.js') </script> </html>
<html> <body> <h1>Hello World!</h1> <!-- All of the Node.js APIs are available in this renderer process. --> We are using node <script>document.write(process.versions.node)</script>, Chromium <script>document.write(process.versions.chrome)</script>, and Electron <script>document.write(process.versions.electron)</script>. </body> <script> // You can also require other files to run in this process require('renderer.js') </script> </html>
renderer.js は script タグで require で読み込まれている。
1e287bdb624bb1a62362316994c226ba7d26f6a9
main process でウィンドウ制御、renderer process で Node.js の API も活用して UI のコードを書くというプログラミングモデル。
両プロセス間の通信もあたり前に行われていた。
この構成が3年ぐらい続くことになる。
1cb6d17b40c6fc14fd6dc4e6f2a951558b7e7297
preload を使用する PR がマージされた。
JS ファイルは preload.js を含む3ファイル構成に
1cb6d17b40c6fc14fd6dc4e6f2a951558b7e7297
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Hello World!</title> </head> <body> <h1>Hello World!</h1> We are using Node.js <span id="node-version"></span>, Chromium <span id="chrome-version"></span>, and Electron <span id="electron-version"></span>. <!-- You can also require other files to run in this process --> <script src="./renderer.js"></script> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Hello World!</title> </head> <body> <h1>Hello World!</h1> We are using Node.js <span id="node-version"></span>, Chromium <span id="chrome-version"></span>, and Electron <span id="electron-version"></span>. <!-- You can also require other files to run in this process --> <script src="./renderer.js"></script> </body> </html>
1cb6d17b40c6fc14fd6dc4e6f2a951558b7e7297
BrowserWindow 生成時の webPreferences で preload.js を読み込み。
function createWindow () { // Create the browser window. mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { preload: path.join(__dirname, 'preload.js') }
function createWindow () { // Create the browser window. mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { preload: path.join(__dirname, 'preload.js') }
preload.js では、index.html の span 要素を指定して process API でバージョンをレンダリング。
window.addEventListener('DOMContentLoaded', () => { for (const versionType of ['chrome', 'electron', 'node']) { document.getElementById(`${versionType}-version`).innerText = process.versions[versionType] } })
window.addEventListener('DOMContentLoaded', () => { for (const versionType of ['chrome', 'electron', 'node']) { document.getElementById(`${versionType}-version`).innerText = process.versions[versionType] } })
1cb6d17b40c6fc14fd6dc4e6f2a951558b7e7297
preload.js で DOM 操作やってしまってるのでサンプルとしては微妙だが。 ↩︎
0ed07b8a7b21da2c9903769af44cb3a49c49fd68
index.html に Content Security Policy の meta タグが追加
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --> <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'"> <meta http-equiv="X-Content-Security-Policy" content="default-src 'self'; script-src 'self'"> <title>Hello World!</title> </head> <body> <h1>Hello World!</h1> We are using Node.js <span id="node-version"></span>, Chromium <span id="chrome-version"></span>, and Electron <span id="electron-version"></span>. <!-- You can also require other files to run in this process --> <script src="./renderer.js"></script> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --> <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'"> <meta http-equiv="X-Content-Security-Policy" content="default-src 'self'; script-src 'self'"> <title>Hello World!</title> </head> <body> <h1>Hello World!</h1> We are using Node.js <span id="node-version"></span>, Chromium <span id="chrome-version"></span>, and Electron <span id="electron-version"></span>. <!-- You can also require other files to run in this process --> <script src="./renderer.js"></script> </body> </html>
4ff40bc838cc4c009f569300a5ba8e6a68924223
デフォルトの CSS ファイルが追加された。
bc9cce16d583ba3b69aae318b3904d8a04979058
inline CSS を 許可する PR がマージされた。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --> <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'"> <link href="./styles.css" rel="stylesheet"> <title>Hello World!</title> </head> <body> <h1>Hello World!</h1> We are using Node.js <span id="node-version"></span>, Chromium <span id="chrome-version"></span>, and Electron <span id="electron-version"></span>. <script src="./renderer.js"></script> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --> <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'"> <link href="./styles.css" rel="stylesheet"> <title>Hello World!</title> </head> <body> <h1>Hello World!</h1> We are using Node.js <span id="node-version"></span>, Chromium <span id="chrome-version"></span>, and Electron <span id="electron-version"></span>. <script src="./renderer.js"></script> </body> </html>
``