我正在嘗試在 Electron 中打開一個簡單的檔案瀏覽器視窗。這個片段,直接來自檔案:
const { dialog } = require('electron')
console.log(dialog.showOpenDialog({ properties: ['openFile', 'multiSelections'] }))
不起作用,并導致:
Uncaught TypeError: Cannot read properties of undefined (reading 'showOpenDialog')
我知道有很多關于這個的話題,但沒有一個建議的解決方案似乎有效。添加enableRemoteModule: true到BrowserWindow定義當然不會。我是否添加.remote或添加.remote.dialog到require()行似乎也無關緊要。
uj5u.com熱心網友回復:
該dialogAPI可用于只有主程序。
您需要讓渲染器行程要求主行程通過 IPC 通道代表它打開一個對話框。這可以通過讓您的預加載腳本公開 API 來完成。
主檔案
const {app, BrowserWindow, dialog, ipcMain} = require('electron');
const path = require('path');
app.whenReady().then(() => {
const win = new BrowserWindow({
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
});
win.loadFile('renderer.html');
ipcMain.on('hey-open-my-dialog-now', () => {
dialog.showOpenDialog({properties: ['openFile', 'multiSelections']})
});
});
預加載.js
const {ipcRenderer, contextBridge} = require('electron');
contextBridge.exposeInMainWorld('MY_APP_NAMESPACE', {
openDialog() {
ipcRenderer.send('hey-open-my-dialog-now');
}
});
渲染器.html
<body>
<button>Ask main process to open a dialog</button>
<script>
document.querySelector('button').addEventListener('click', () => {
MY_APP_NAMESPACE.openDialog();
});
</script>
</body>
然后運行:
$ npx electron main.js
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/362460.html
標籤:javascript 电子
