【Electron Playground 系列】Dialog 與文件選擇篇

作者: OBKoro1

electron原生對(duì)話框

electron的原生對(duì)話框dialog躁锁,提供了系統(tǒng)對(duì)話框, 提供了消息提示纷铣、消息提示操作以及選擇文件、保存文件等操作战转,今天就跟著本文來(lái)了解一下electron搜立。

PS:本文以及相關(guān)示例出自electron-playground,所有示例都可以即時(shí)運(yùn)行槐秧,這是一個(gè)可以快速實(shí)驗(yàn)electron的各種相關(guān)API的項(xiàng)目啄踊,你可以基于它來(lái)學(xué)習(xí)和了解electron的相關(guān)api。

1. 消息提示 dialog.showMessageBoxSync

1.1 消息提示

const { dialog } = require('electron')
dialog.showMessageBoxSync({
  type: 'info',
  title: '這里是標(biāo)題',
  message: '提示內(nèi)容',
  detail: '額外信息'
})

electron-playgroud運(yùn)行示例:

dialog-info.gif

1.2 消息提示與確認(rèn)

const { dialog } = require('electron')
const res = dialog.showMessageBoxSync({
  type: 'info',
  title: '這里是標(biāo)題',
  message: '提示內(nèi)容',
  detail: '額外信息',
  cancelId: 1, // 按esc默認(rèn)點(diǎn)擊索引按鈕
  defaultId: 0, // 默認(rèn)高亮的按鈕下標(biāo)
  buttons: ['確認(rèn)按鈕', '取消按鈕'], // 按鈕按索引從右往左排序
})
console.log('操作結(jié)果', res, res === 0 ? '點(diǎn)擊確認(rèn)按鈕' : '點(diǎn)擊取消按鈕') // 根據(jù)按鈕數(shù)組中的下標(biāo)來(lái)判斷
console.log('操作中還有個(gè)checkboxLabel的單選框需要使用showMessageBox api才可以獲取到返回值')

electron-playgroud運(yùn)行示例:

dialog-action.gif

1.3 API說(shuō)明

dialog.showMessageBoxSync(browserWindow, options)

顯示一個(gè)消息框刁标,它將阻止進(jìn)程社痛,直到消息框被關(guān)閉。返回值為點(diǎn)擊的按鈕的索引命雀。

參數(shù):

  • browserWindow
    可以指定一個(gè)父窗口,作為模態(tài)窗口附加到該窗口斩箫。
  • options
    • type: String (可選) - "none" | "info" | "error" | "question" 不同的type提示的圖標(biāo)不同吏砂;
    • title: String (可選) - message box 的標(biāo)題,一些平臺(tái)不顯示乘客,建議使用message和detail;
    • message: String - message box 的內(nèi)容.
    • detail: String (可選) - 額外信息
    • buttons String[] - 字符串按鈕數(shù)組,按鈕按索引從右往左排序线婚,如果未指定默認(rèn)有一個(gè)"OK"的按鈕贿衍。
    • defaultId: Integer (可選) - 默認(rèn)高亮的按鈕下標(biāo),回車的時(shí)候自動(dòng)選中該項(xiàng)
    • cancelId: Integer (可選) 按esc默認(rèn)點(diǎn)擊索引按鈕

返回值類型:

  • number: 所點(diǎn)擊的按鈕的索引

dialog.showMessageBox(browserWindow, options)

與dialog.showMessageBoxSync類似,不同點(diǎn)在于:

  1. 這是一個(gè)異步方法缀匕,返回值為Promise類型纳决;
  2. 對(duì)話框可以指定一個(gè)checkbox(復(fù)選框),返回值中也增加了對(duì)應(yīng)的字段, 同步方法(showMessageBoxSyc)拿不到這個(gè)字段乡小;

下面是帶復(fù)選框的示例:

const { dialog } = require('electron')
const res = dialog.showMessageBox({
  type: 'info',
  title: '這里是標(biāo)題',
  message: '提示內(nèi)容',
  detail: '額外信息',
  cancelId: 1, // 按esc默認(rèn)點(diǎn)擊索引按鈕
  defaultId: 0, // 默認(rèn)高亮的按鈕下標(biāo)
  checkboxLabel: '單選框內(nèi)容',
  checkboxChecked: false, // 是否選中單選框
  buttons: ['確認(rèn)按鈕', '取消按鈕'], // 按鈕按索引從右往左排序
})
console.log('操作結(jié)果 promise', res) // 返回一個(gè)promise可以通過(guò)它判斷結(jié)果

electron-playgroud運(yùn)行示例:

dialog-action2.gif

2. 選擇文件和文件夾

2.1 選擇文件實(shí)例

const { dialog, app } = require('electron')
const res = dialog.showOpenDialogSync({
  title: '對(duì)話框窗口的標(biāo)題',
  // 默認(rèn)打開(kāi)的路徑阔加,比如這里默認(rèn)打開(kāi)下載文件夾
  defaultPath: app.getPath('downloads'), 
  buttonLabel: '確認(rèn)按鈕文案',
  // 限制能夠選擇的文件類型
  filters: [
    // { name: 'Images', extensions: ['jpg', 'png', 'gif'] },
    // { name: 'Movies', extensions: ['mkv', 'avi', 'mp4'] },
    // { name: 'Custom File Type', extensions: ['as'] },
    // { name: 'All Files', extensions: ['*'] }, 
  ],
  properties: [ 'openFile', 'openDirectory', 'multiSelections', 'showHiddenFiles' ],
  message: 'mac文件選擇器title'
})
console.log('res', res)

electron-playgroud運(yùn)行示例:

dialog-file.gif

API說(shuō)明

dialog.showOpenDialogSync(browserWindow,options)

參數(shù):

options

  • defaultPath String (可選) - 設(shè)置對(duì)話框默認(rèn)打開(kāi)哪個(gè)路徑,需要設(shè)置一個(gè)有效路徑否則將不生效满钟。
  • buttonLabel String (可選) - 確認(rèn)按鈕的文案, 當(dāng)為空時(shí), 將使用默認(rèn)標(biāo)簽
  • filters 默認(rèn)所有文件類型都可以選擇胜榔,設(shè)置后,只能選擇允許的文件類型
  • properties String[] (可選)
    • openFile - 允許選擇文件
    • openDirectory - 允許選擇文件夾
    • multiSelections - 允許多選。
    • showHiddenFiles - 顯示對(duì)話框中的隱藏文件
  • message String (可選) - mac文件選擇器的title

tips: 嘗試修改options中的參數(shù)來(lái)查看效果湃番;

返回值類型:

String[] | undefined - 用戶選擇的文件或文件夾路徑;如果取消對(duì)話框夭织,則返回undefined

完整API解釋參考文檔

3. 保存文件

3.1 實(shí)例

const { dialog } = require('electron')
const res = dialog.showSaveDialogSync({
  title: '對(duì)話框窗口的標(biāo)題',
  defaultPath: '', // 打開(kāi)文件選擇器的哪個(gè)路徑 需要輸入一個(gè)有效路徑
  buttonLabel: '確認(rèn)按鈕文案',
  // 限制能夠選擇的文件為某些類型
  filters: [
    // { name: 'Images', extensions: ['jpg', 'png', 'gif'] },
    // { name: 'Movies', extensions: ['mkv', 'avi', 'mp4'] },
    // { name: 'Custom File Type', extensions: ['as'] },
    // { name: 'All Files', extensions: ['*'] }, 
  ],
  nameFieldLabel: '替換文件', // “文件名”文本字段前面顯示的文本自定義標(biāo)簽
  showsTagField: true, // 顯示標(biāo)簽輸入框,默認(rèn)值為true
  properties: [ 'showHiddenFiles' ],
  message: 'mac文件選擇器title'
})
console.log('res', res)

electron-playgroud運(yùn)行示例:

dialog-file-save.gif

3.2 API說(shuō)明

dialog.showSaveDialogSync(browserWindow,options)

參數(shù):

options

  • defaultPath String (可選) - 設(shè)置對(duì)話框默認(rèn)打開(kāi)哪個(gè)路徑吠撮,需要設(shè)置一個(gè)有效路徑否則將不生效尊惰。
  • buttonLabel String (可選) - 確認(rèn)按鈕的文案, 當(dāng)為空時(shí), 將使用默認(rèn)標(biāo)簽
  • filters 默認(rèn)所有文件類型都可以選擇,設(shè)置后,只能選擇允許的文件類型
  • properties String[] (可選)
    • openFile - 允許選擇文件
    • openDirectory - 允許選擇文件夾
    • multiSelections - 允許多選纬向。
    • showHiddenFiles - 顯示對(duì)話框中的隱藏文件
  • message String (可選) - mac文件選擇器的title

返回值類型:

String[] | undefined - 用戶選擇的文件或文件夾路徑;如果取消對(duì)話框择浊,則返回undefined;

完整API解釋參考文檔

3.3 不同場(chǎng)景表現(xiàn)

  1. 選擇了一個(gè)存在的文件
    提示"文件夾中已有相同名稱的文件或文件夾逾条。替換它將覆蓋其當(dāng)前內(nèi)容琢岩。",點(diǎn)擊確認(rèn)后返回該文件地址
  2. 選擇了一個(gè)不存在的文件
    返回該不存在的文件地址

4. 錯(cuò)誤信息彈窗

dialog.showErrorBox

這個(gè)API可以在app模塊觸發(fā)ready事件之前被安全地調(diào)用师脂,它通常用在啟動(dòng)時(shí)報(bào)告錯(cuò)誤担孔。 在Linux上, ready事件之前調(diào)用這個(gè)API, 消息將被發(fā)送到stderr, 并且不會(huì)出現(xiàn)GUI對(duì)話框。

const { dialog } = require('electron')
dialog.showErrorBox('報(bào)錯(cuò)標(biāo)題', '報(bào)錯(cuò)內(nèi)容')
console.log('API非常簡(jiǎn)單用于報(bào)錯(cuò)很方便')
dialog-error.gif

小結(jié)

以上就是本文的內(nèi)容了吃警,更多關(guān)于electron的知識(shí)點(diǎn)擊進(jìn)入electron-playground倉(cāng)庫(kù)來(lái)了解吧糕篇,希望通過(guò)這個(gè)項(xiàng)目大家能夠更好的學(xué)習(xí)和理解electron,少走彎路。

  1. electron-playground是一個(gè)通過(guò)嘗試electron各種特性酌心,使electron的各項(xiàng)特性所見(jiàn)即所得, 來(lái)達(dá)到我們快速上手和學(xué)習(xí)electron的目的拌消。
  2. electron-playground 系統(tǒng)性的整理了electron相關(guān)的api,方便你在實(shí)際業(yè)務(wù)中選擇相應(yīng)的app安券。
  3. 在electron-playground中所有代碼都可以即時(shí)運(yùn)行墩崩,即時(shí)反饋,可以下載一下我們項(xiàng)目來(lái)嘗試一下侯勉,相信你不會(huì)失望的鹦筹。

對(duì) Electron 感興趣?請(qǐng)關(guān)注我們的開(kāi)源項(xiàng)目 Electron Playground址貌,帶你極速上手 Electron铐拐。

我們每周五會(huì)精選一些有意思的文章和消息和大家分享徘键,來(lái)掘金關(guān)注我們的 曉前端周刊


我們是好未來(lái) · 曉黑板前端技術(shù)團(tuán)隊(duì)遍蟋。
我們會(huì)經(jīng)常與大家分享最新最酷的行業(yè)技術(shù)知識(shí)吹害。
歡迎來(lái) 知乎掘金匿值、Segmentfault赠制、CSDN簡(jiǎn)書(shū)挟憔、開(kāi)源中國(guó)钟些、博客園 關(guān)注我們。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绊谭,一起剝皮案震驚了整個(gè)濱河市政恍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌达传,老刑警劉巖篙耗,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異宪赶,居然都是意外死亡宗弯,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門搂妻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蒙保,“玉大人,你說(shuō)我怎么就攤上這事欲主〉瞬蓿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵扁瓢,是天一觀的道長(zhǎng)详恼。 經(jīng)常有香客問(wèn)我,道長(zhǎng)引几,這世上最難降的妖魔是什么昧互? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮伟桅,結(jié)果婚禮上硅堆,老公的妹妹穿的比我還像新娘。我一直安慰自己贿讹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布够掠。 她就那樣靜靜地躺著民褂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赊堪,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天面殖,我揣著相機(jī)與錄音,去河邊找鬼哭廉。 笑死脊僚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的遵绰。 我是一名探鬼主播辽幌,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼椿访!你這毒婦竟也來(lái)了乌企?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤成玫,失蹤者是張志新(化名)和其女友劉穎加酵,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體哭当,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡猪腕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钦勘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陋葡。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖个盆,靈堂內(nèi)的尸體忽然破棺而出脖岛,到底是詐尸還是另有隱情,我是刑警寧澤颊亮,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布柴梆,位于F島的核電站,受9級(jí)特大地震影響终惑,放射性物質(zhì)發(fā)生泄漏绍在。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一雹有、第九天 我趴在偏房一處隱蔽的房頂上張望偿渡。 院中可真熱鬧,春花似錦霸奕、人聲如沸溜宽。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)适揉。三九已至留攒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嫉嘀,已是汗流浹背炼邀。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剪侮,地道東北人拭宁。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像瓣俯,于是被迫代替她去往敵國(guó)和親杰标。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容