Dado:
webPreferences: { nodeIntegration: false, contextIsolation: true, sandbox: true, } Necesito acceder al resultado de app.getPath("appData") en mi proceso de representación.
app.getPath("appData") solo funciona en el proceso principal.
contextBridge.exposeInMainWorld() solo funciona en el script de precarga.
¿Cómo expongo el resultado de app.getPath("appData") al renderizador si el script de precarga no puede acceder a app.getPath("appData") y el proceso principal no puede acceder a contextBridge.exposeInMainWorld() ?
Puedes
exposeInMainWorld en el mundo principal para colocar una función de invocación de promesas en la ventana. Cuando se invoca, realiza una solicitud al proceso principal. // Main process: ipcMain.handle('getPath', () => app.getPath("appData")); // Preload: contextBridge.exposeInMainWorld('electronAPI', { getPath: () => ipcRenderer.invoke('getPath') }); // Renderer: window.electronAPI.getPath() .then((appDataPath) => { // ... }) .catch(handleErrors);El script de precarga actúa esencialmente como un puente entre la página de espacio aislado y el proceso principal privilegiado; a menudo, la mayor parte de la lógica de una aplicación vivirá en el proceso principal o en el renderizador, y la precarga solo los une.
Para un enfoque más generalizado de envío de mensajes desde el renderizador al principal (posiblemente mientras se espera una respuesta), encontré que lo siguiente funciona bastante bien:
// Preload: contextBridge.exposeInMainWorld('electronAPI', { sendMessageToMainProcess: (channel: string, payload: unknown) => ipcRenderer.invoke(channel, payload), });