ELECTRON
Construindo Aplicações Desktop
Multi-Plataforma com HTML, CSS e JS
Rafael Jaques (@rafajaques)
FISL 17
Slide 2
Slide 2 text
“Os que confiam no SENHOR serão como o
monte de Sião, que não se abala, mas
permanece para sempre.” (Salmo 125.1)
Slide 3
Slide 3 text
Rafael Jaques
@rafajaques
Professor do IFRS
Desenvolvedor web e viciado
em segurança
Entusiasta Open Source
Evangelista PHP e Electron
rafajaques.com.br
phpit.com.br
github.com/rafajaques
speakerdeck.com/rafajaques
Slide 4
Slide 4 text
O que veremos?
O que é o Electron?
Como funciona?
O que já existe?
Primeiros passos
Distribuindo a aplicação
E várias outras coisas…
Slide 5
Slide 5 text
O que é o Electron?
Slide 6
Slide 6 text
Electron é um framework para
desenvolvimento desktop
multi-plataforma com a
utilização de tecnologias web.
Slide 7
Slide 7 text
Conhecido inicialmente como Atom
Shell, foi criado para que pudesse ser
desenvolvido o Atom.
Slide 8
Slide 8 text
No content
Slide 9
Slide 9 text
Plataformas suportadas
Electron >= 1.0.0
>= 7
x86; x64
Ubuntu >= 12
Fedora >= 21
Debian >= 8
Possivelmente outras
x86; x64; arm
>= 10.9
x64
Slide 10
Slide 10 text
Tecnologias envolvidas
Slide 11
Slide 11 text
No content
Slide 12
Slide 12 text
No content
Slide 13
Slide 13 text
Basicamente o Electron é um
Chromium com
poderes de Node.js
Slide 14
Slide 14 text
Como o Electron
funciona?
Slide 15
Slide 15 text
No content
Slide 16
Slide 16 text
Renderer
Página Web
Main
Ciclo de vida da app
browser-window
ipc
Node.js
menu
dialog
web-frame
ipc
Node.js
DOM
remote
app
Controla o ciclo de vida
da aplicação
app.quit()
app.relaunch()
app.focus()
app.getLocale()
app.setBadgeCount() [OSX,Linux]
app.dock.bounce() [OSX]
http://electron.atom.io/docs/api/app/
Slide 45
Slide 45 text
BrowserWindow
Cria e controla janelas
Slide 46
Slide 46 text
BrowserWindow
// No processo principal
const {BrowserWindow} = require('electron');
// Ou no processo renderer
const {BrowserWindow} = require('electron').remote;
let win = new BrowserWindow({width: 800, height: 600});
win.on('closed', () => {
win = null;
});
win.loadURL('http://rafajaques.com.br');
// http://electron.atom.io/docs/api/browser-window/
Slide 47
Slide 47 text
http://electron.atom.io/docs/api/browser-window/
Slide 48
Slide 48 text
Frameless
const {BrowserWindow} = require('electron');
let win = new BrowserWindow({
width: 800,
height: 600,
frame: false
});
Slide 49
Slide 49 text
dialog
Manipula janelas nativas do
sistema (abrir, salvar etc.)
dialog.showOpenDialog()
dialog.showSaveDialog()
dialog.showMessageBox()
dialog.showErrorBox()
http://electron.atom.io/docs/api/dialog/
Slide 50
Slide 50 text
dialog
let win = ...; // BrowserWindow na qual será aberta a
janela
const {dialog} = require('electron');
console.log(dialog.showOpenDialog({
properties: [
'openFile', // Janela para abrir arquivo
'openDirectory', // Permitir abrir diretórios
'multiSelections' // Permitir selecionar vários itens
]
}));
Slide 51
Slide 51 text
screen
Recupera informações da tela:
tamanho, displays, cursor etc.
Slide 52
Slide 52 text
screen
// Criar uma janela que ocupa toda a tela
const electron = require('electron');
const {app, BrowserWindow} = electron;
let win
app.on('ready', () => {
const {width, height} =
electron.screen.getPrimaryDisplay().workAreaSize;
win = new BrowserWindow({width, height});
});
// http://electron.atom.io/docs/api/screen/
Slide 53
Slide 53 text
Tray
Adiciona ícones e menus à área
de notificação do sistema
Existem algumas limitações
http://electron.atom.io/docs/api/tray/
IPC - Síncrono
// Processo principal
const {ipcMain} = require('electron');
ipcMain.on('mensagem-sincrona', (event, arg) => {
console.log(arg); // "ping"
event.returnValue = 'pong';
});
// No processo renderer (página web)
const {ipcRenderer} = require('electron');
console.log(ipcRenderer.sendSync('mensagem-sincrona',
'ping')); // "pong"
Slide 60
Slide 60 text
WebContents
Executando JS no navegador
Slide 61
Slide 61 text
Executar JS via webContents
// Caso a sua janela esteja na variável "mainWindow"
mainWindow.webContents.executeJavaScript(
'alert("Funcionando!")'
);
Tente evitar…
Slide 62
Slide 62 text
Armazenando
dados
Slide 63
Slide 63 text
1. Local Storage
2. Bancos de Dados
(via pacotes npm)