105 lines
		
	
	
	
		
			3.1 KiB
			
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
	
		
			3.1 KiB
			
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE html>
 | |
| <html>
 | |
|   <head>
 | |
|     <meta charset="UTF-8" />
 | |
|     <title>Open File or Directory</title>
 | |
|   </head>
 | |
| 
 | |
|   <body>
 | |
|     <div class="section-wrapper">
 | |
|       <h1>Use system dialogs</h1>
 | |
| 
 | |
|       <h3>
 | |
|         The <code>dialog</code> module in Electron allows you to use native
 | |
|         system dialogs for opening files or directories, saving a file or
 | |
|         displaying informational messages.
 | |
|       </h3>
 | |
| 
 | |
|       <p>
 | |
|         This is a main process module because this process is more efficient
 | |
|         with native utilities and it allows the call to happen without
 | |
|         interrupting the visible elements in your page's renderer process.
 | |
|       </p>
 | |
| 
 | |
|       <p>
 | |
|         Open the
 | |
|         <a href="https://www.electronjs.org/docs/latest/api/dialog/">
 | |
|           full API documentation (opens in new window)
 | |
|         </a>
 | |
|         in your browser.
 | |
|       </p>
 | |
|     </div>
 | |
| 
 | |
|     <div>
 | |
|       <div>
 | |
|         <h2>Open a File or Directory</h2>
 | |
|         <div>
 | |
|           <div>
 | |
|             <button id="select-directory">View Demo</button>
 | |
|             <span id="selected-file"></span>
 | |
|           </div>
 | |
|           <p>
 | |
|             In this demo, the <code>ipc</code> module is used to send a message
 | |
|             from the renderer process instructing the main process to launch the
 | |
|             open file (or directory) dialog. If a file is selected, the main
 | |
|             process can send that information back to the renderer process.
 | |
|           </p>
 | |
|           <h5>Renderer Process</h5>
 | |
|           <pre>
 | |
|           <code>
 | |
| const {ipcRenderer} = require('electron')
 | |
| 
 | |
| const selectDirBtn = document.getElementById('select-directory')
 | |
| 
 | |
| selectDirBtn.addEventListener('click', (event) => {
 | |
|   ipcRenderer.send('open-file-dialog')
 | |
| })
 | |
| 
 | |
| ipcRenderer.on('selected-directory', (event, path) => {
 | |
|   document.getElementById('selected-file').innerHTML = `You selected: ${path}`
 | |
| })
 | |
|           </code>
 | |
|         </pre>
 | |
|           <h5>Main Process</h5>
 | |
|           <pre>
 | |
|           <code>
 | |
| const {ipcMain, dialog} = require('electron')
 | |
| 
 | |
| ipcMain.on('open-file-dialog', (event) => {
 | |
|   dialog.showOpenDialog({
 | |
|     properties: ['openFile', 'openDirectory']
 | |
|   }, (files) => {
 | |
|     if (files) {
 | |
|       event.sender.send('selected-directory', files)
 | |
|     }
 | |
|   })
 | |
| })
 | |
|           </code>
 | |
|         </pre>
 | |
| 
 | |
|           <div>
 | |
|             <h2>ProTip</h2>
 | |
|             <strong>The sheet-style dialog on macOS.</strong>
 | |
|             <p>
 | |
|               On macOS you can choose between a "sheet" dialog or a default
 | |
|               dialog. The sheet version descends from the top of the window. To
 | |
|               use sheet version, pass the <code>window</code> as the first
 | |
|               argument in the dialog method.
 | |
|             </p>
 | |
|             <pre><code class="language-js">const ipc = require('electron').ipcMain
 | |
| const dialog = require('electron').dialog
 | |
| const BrowserWindow = require('electron').BrowserWindow
 | |
| 
 | |
| 
 | |
| ipc.on('open-file-dialog-sheet', function (event) {
 | |
|   const window = BrowserWindow.fromWebContents(event.sender)
 | |
|   const files = dialog.showOpenDialog(window, { properties: [ 'openFile' ]})
 | |
| })</code></pre>
 | |
|           </div>
 | |
|         </div>
 | |
|       </div>
 | |
|     </div>
 | |
| 
 | |
|     <script src="renderer.js"></script>
 | |
|   </body>
 | |
| </html>
 | 
