GitHub - electron/electron-quick-start: Clone to try a simple Electron app
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>
``