下面是 Electron
中主進程可用的模塊:git
模塊 | 描述 |
---|---|
app | 負責控制應用程序的整個生命週期 |
autoUpdater | 該模塊提供了一個到 Squirrel 自動更新框架的接口 |
BrowserWindow | 能夠用於建立一個新的瀏覽器窗口 |
contentTracing | 用來收集 Chromium 內容模塊產生的跟蹤信息 |
dialog | 用來顯示原生系統對話框,好比打開文件對話框 |
global-Shortcut | 用來註冊和註銷全局的鍵盤快捷方式 |
ipcMain | 該模塊是 EventEmitter 的一個實例對象,在主進程中使用,能夠發送同步或是異步的消息和渲染進程進行交互 |
Menu | 用來建立一個原生的菜單,好比上下文菜單 |
MenuItem | 用來往菜單中添加菜單子項 |
powerMonitor | 用來顯示電池電量變化,只能是在主進程中使用,並且只能是在ready事件已經發出的狀況下 |
powerSaveBlocker | 用來阻止系統進入省電模式,休眠模式 |
protocol | 用來註冊一個定製的協議或是聲明使用一個已經存在的協議 |
session | 用來建立新的 Session 對象,保存本地對象等操做 |
webContents | 這是一個 EventEmitter ,負責渲染和控制一個網頁,是一個 BrowserWindow 的屬性 |
Tray | 一個 Tray 表明着一個操做系統通知區域的一個 icon ,一般狀況下是和一個上下文菜單綁定的 |
app
模塊是爲了控制整個應用的生命週期設計的。github
例如在最後一個窗口被關閉時退出應用:web
const app = require('app'); app.on('window-all-closed', function(){ app.quit(); });
app
對象能夠發出如下事件:chrome
事件 | 描述 |
---|---|
will-finish-launching | 當程序完成基本的啓動,相似於 ready 事件 |
ready | 當 Electron 完成初始化時被觸發 |
window-all-closed | 當全部的窗口都已經關閉的時候觸發。僅在當程序將要推退出的時候觸發。若是調用了 app.quit() 則不會觸發 |
before-quit | 當程序開始關閉窗口的時候發出,調用 event.prevertDefault() 將會阻止應用程序的默認的行爲 |
will-quit | 當窗口都已經關閉,程序即將退出的時候發出該事件 |
quit | 當應用程序正在退出時觸發 |
autoUpdater
模塊提供了一個到 Squirrel
自動更新框架的接口。api
autoUpdater
對象會觸發如下的事件:瀏覽器
事件 | 描述 |
---|---|
error | 當更新發生錯誤的時候觸發 |
checking-for-update | 當開始檢查更新的時候觸發 |
update-available | 當發現一個可用更新的時候觸發,更新包下載會自動開始 |
update-not-available | 當沒有可用更新的時候觸發 |
update-downloaded | 在更新下載完成的時候觸發 |
BrowserWindow
模塊用於建立一個新的瀏覽器窗口。session
// 在主進程中 const BrowserWindow = require('electron').BrowserWindow; // 在渲染進程中 const BrowserWindow = require('electron').remote.BrowserWindow; var win = new BrowserWindow({ width: 800, height: 400, show: false }); win.on('closed', function() { win = null; }); win.loadURL('https://github.com'); win.show();
BrowserWindow
對象可觸發下列事件:app
事件 | 描述 |
---|---|
close | 在窗口要關閉的時候觸發,它在 DOM 的 beforeunload 和 unload 事件以前觸發,使用 event.preventDefault() 能夠取消這個操做 |
closed | 當窗口已經關閉的時候觸發,當你接收到這個事件的時候,你應當刪除對已經關閉的窗口的引用對象和避免再次使用它 |
unresponsive | 在界面卡死的時候觸發事件 |
responsive | 在界面恢復卡死的時候觸發 |
blur | 在窗口失去焦點的時候觸發 |
focus | 在窗口得到焦點的時候觸發 |
maximize | 在窗口最大化的時候觸發 |
unmaximize | 在窗口退出最大化的時候觸發 |
minimize | 在窗口最小化的時候觸發 |
restore | 在窗口從最小化恢復的時候觸發 |
resize | 在窗口 size 改變的時候觸發 |
move | 在窗口移動的時候觸發,在 OS X 中別名爲 moved |
contentTracing
模塊用來收集底層的 Chromium
內容模塊產生的搜索數據,這個模塊不具有 web
接口,因此須要咱們在 chrome
瀏覽器中添加 chrome://tracing/
來加載生成文件從而查看結果。框架
const contentTracing = require('contentTracing').; const options = { categoryFilter: '*', traceOptions: 'record-until-full,enable-sampling' } contentTracing.startRecording(options, function() { console.log('Tracing started'); setTimeout(function() { contentTracing.stopRecording('', function(path) { console.log('Tracing data recorded to ' + path); }); }, 3000); });
content-tracing
模塊的方法以下:異步
方法 | 描述 |
---|---|
getCategories | 得到一組分類組,分類組能夠更改成新的代碼路徑 |
startRecording | 開始向全部進程進行記錄,一旦收到能夠開始記錄的請求,記錄將會立馬啓動而且在子進程是異步記錄的 |
stopRecording | 中止對全部子進程的記錄 |
startMonitoring | 開始向全部進程進行監聽 |
stopMonitoring | 中止對全部子進程的監聽 |
captureMonitoringSnapshot | 獲取當前監聽的查找數據 |
getTraceBufferUsag | 經過查找 buffer 進程來獲取百分比最大使用量 |
setWatchEvent | 任意時刻在任何進程上指定事件發生時將調用 callback |
cancelWatchEvent | 取消 watch 事件,若是啓動查找,這或許會形成 watch 事件的回調函數 出錯 |
dialog
模塊提供了api
來展現原生的系統對話框,例如打開文件框或 alert
框。因此 web
應用能夠給用戶帶來跟系統應用相同的體驗。
對話框例子,展現了選擇文件和目錄:
var win = ...; // 顯示對話框的瀏覽器窗口 const dialog = require('electron').dialog; console.log(dialog.showOpenDialog({ properties: [ 'openFile', 'openDirectory', 'multiSelections' ]}));
global-shortcut
模塊用於設置各類自定義操做的快捷鍵。注意使用此模塊註冊的快捷鍵是系統全局的,不要在應用模塊響應 ready
消息前使用此模塊。
var app = require('app'); var globalShortcut = require('electron').globalShortcut; app.on('ready', function() { // 註冊一個'ctrl+x'快捷方式 var ret = globalShortcut.register('ctrl+x', function() { console.log('ctrl+x is pressed'); }) if (!ret) { console.log('registration failed'); } // 檢查是否註冊了'ctrl+x'快捷方式 console.log(globalShortcut.isRegistered('ctrl+x')); }); app.on('will-quit', function() { // 註銷'ctrl+x'快捷方式 globalShortcut.unregister('ctrl+x'); // 註銷全部快捷方式 globalShortcut.unregisterAll(); });
ipcMain
模塊是類 EventEmitter
的實例,當在主進程中使用它的時候,它控制着由渲染進程發送過來的異步或同步消息,從渲染進程發送過來的消息將觸發事件。
下面是一個在主進程和渲染進程之間發送和處理消息的實例。
主進程:
const ipcMain = require('electron').ipcMain; ipcMain.on('asynchronous-message', function(event, arg) { console.log(arg); // 輸出ping event.sender.send('asynchronous-reply', 'pong'); }); ipcMain.on('synchronous-message', function(event, arg) { console.log(arg); // 輸出ping event.returnValue = 'pong'; });
渲染進程:
const ipcRenderer = require('electron').ipcRenderer; console.log(ipcRenderer.sendSync('synchronous-message', 'ping')); // 輸出pong ipcRenderer.on('asynchronous-reply', function(event, arg) { console.log(arg); // 輸出pong }); ipcRenderer.send('asynchronous-message', 'ping');
menu
模塊能夠用來建立原生菜單,它可用做應用菜單和內容菜單。
建立一個新菜單的語法:
var menu = new Menu();
MenuItem
模塊用來往菜單中添加菜單子項。
建立一個新的 MenuItem
的語法:
var menuItem = new MenuItem(options)
options
的選項以下所示:
click
role
type
label
sublabel
accelerator
icon
enabled
visible
checked
submenu
id
position
powerMonitor
模塊是用來監聽能源區改變的,只能在主進程中使用。在 app
模塊的 ready
事件觸發以後就不能使用這個模塊了。
app.on('ready', function() { require('electron').powerMonitor.on('suspend', function() { console.log('系統將進入休眠狀態'); }); });
powerMonitor
對象會觸發如下的事件:
事件 | 描述 |
---|---|
suspend | 在系統掛起的時候觸發 |
resume | 在系統恢復繼續工做的時候觸發 |
on-ac | 在系統使用交流電的時候觸發 |
on-battery | 在系統使用電池電源的時候觸發 |
powerSaveBlocker
模塊是用來阻止應用系統進入睡眠模式的,所以這容許應用保持系統和屏幕繼續工做。
const powerSaveBlocker = require('electron').powerSaveBlocker; var id = powerSaveBlocker.start('prevent-display-sleep'); console.log(powerSaveBlocker.isStarted(id)); powerSaveBlocker.stop(id);
powerMonitor
模塊有以下方法:
方法 | 描述 |
---|---|
start | 開始阻止系統進入睡眠模式 |
stop | 讓指定 blocker 中止活躍 |
isStarted | 返回 boolean , 是否對應的 powerSaveBlocker 已經啓動 |
protocol
模塊能夠註冊一個自定義協議,或者使用一個已經存在的協議。這個模塊只有在 app
模塊的 ready
事件觸發以後纔可以使用。
使用一個與 file://
功能類似的協議 :
const electron = require('electron'); const app = electron.app; const path = require('path'); app.on('ready', function() { var protocol = electron.protocol; protocol.registerFileProtocol('atom', function(request, callback) { var url = request.url.substr(7); callback({path: path.normalize(__dirname + '/' + url)}); }, function (error) { if (error) console.error('註冊協議失敗') }); });
session
模塊能夠用來建立一個新的 Session
對象。
const BrowserWindow = require('electron').BrowserWindow; var win = new BrowserWindow({ width: 800, height: 600 }); win.loadURL("http://github.com"); var ses = win.webContents.session;
webContents
是一個 EventEmitter
,負責渲染和控制一個網頁,是一個 BrowserWindow
對象的屬性。
const BrowserWindow = require('electron').BrowserWindow; var win = new BrowserWindow({width: 800, height: 1500}); win.loadURL("https://www.9xkd.com/"); var webContents = win.webContents;
webContents
對象可發出下列事件:
事件 | 描述 |
---|---|
did-finish-load | 當導航完成時發出事件,onload 事件也完成 |
did-fail-load | 這個事件相似 did-finish-load ,可是是在加載失敗或取消加載時發出 |
did-frame-finish-load | 當一個 frame 導航完成的時候發出事件 |
did-start-loading | 當 tab 的 spinner 開始 spinning 的時候 |
did-stop-loading | 當 tab 的 spinner 結束 spinning 的時候 |
did-get-response-details | 當有關請求資源的詳細信息可用的時候發出事件 |
did-get-redirect-request | 當指定 frame 中的 文檔加載完成的時候發出事件 |
page-favicon-updated | 當 page 收到圖標 url 的時候發出事件 |
new-window | 當 page 請求打開指定 url 窗口的時候發出事件 |
will-navigate | 當用戶或 page 想要開始導航的時候發出事件 |
did-navigate | 當一個導航結束時候發出事件 |
did-navigate-in-page | 當頁內導航發生的時候發出事件 |
crashed | 當渲染進程崩潰的時候發出事件 |
plugin-crashed | 當插件進程崩潰時候發出事件 |
destroyed | 當 webContents 被刪除的時候發出事件 |
devtools-opened | 當開發者工具欄打開的時候發出事件 |
devtools-closed | 當開發者工具欄關閉時候發出事件 |
devtools-focused | 當開發者工具欄得到焦點或打開的時候發出事件 |
certificate-error | 當驗證證書或 url 失敗的時候發出事件 |
select-client-certificate | 當請求客戶端證書的時候發出事件 |
login | 當 webContents 想作基本驗證的時候發出事件 |
found-in-page | 當使用 webContents.findInPage 進行頁內查找而且找到可用值得時候發出事件 |
media-started-playing | 當媒體開始播放的時候發出事件 |
media-paused | 當媒體中止播放的時候發出事件 |
did-change-theme-color | 當 page 的主題色時候發出事件,這一般因爲引入了一個 meta 標籤 |
cursor-changed | 當鼠標的類型發生改變的時候發出事件 |