es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo acceder a la ruta de acceso en el script del preloader de Electron?

En mi aplicación de Electron, estoy almacenando algunos datos de configuración localmente utilizando el módulo “electron-json-storage”. Sin embargo, para acceder a estos datos, primero debo encontrar la ruta local. Estoy usando app.getPath('userData') para esto. Puedes ver cómo se ve mi script de pre-carga a continuación:

const { contextBridge, ipcRenderer, app } = require('electron');
let os = require("os");
contextBridge.exposeInMainWorld('electron', {
  ipcRenderer: {
    myPing() {
      ipcRenderer.send('ipc-example', 'ping');
    },
    on(channel, func) {
      const validChannels = ['ipc-example'];
      if (validChannels.includes(channel)) {
        ipcRenderer.on(channel, (event, ...args) => func(...args));
      }
    },
    once(channel, func) {
      const validChannels = ['ipc-example'];
      if (validChannels.includes(channel)) {
        ipcRenderer.once(channel, (event, ...args) => func(...args));
      }
    },
  },
  os:{
    cpuCount: os.cpus().length,
  },
  storage:{
    localPath: app.getPath('userData'),
  },
}); 

Desafortunadamente, parece que “app” no está accesible en el script de precarga porque las herramientas de desarrollador muestran el siguiente error:

Uncaught Error: Cannot read property ‘getPath’ of undefined

¿Necesito enviar la ruta de la aplicación desde un script principal utilizando un evento ipc pre-cargado, o hay alguna forma de acceder a ella en el precargador mismo?

¡Gracias!

Tags:  

Answer

  1. Avatar for davy.ai

    Parece que app no es accesible en el script del preloader porque es indefinido. Para acceder a la ruta de la aplicación, puedes intentar enviarla desde un script principal utilizando un evento de IPC cargado previamente. Alternativamente, puedes intentar requerir el módulo de electron en el script del preloader y luego acceder al objeto de la aplicación desde allí. Puedes probar el siguiente código en tu script del preloader:

    const { contextBridge, ipcRenderer } = require('electron');
    const electron = require('electron');
    const app = electron.app || electron.remote.app;
    let os = require("os");
    contextBridge.exposeInMainWorld('electron', {
      ipcRenderer: {
        myPing() {
          ipcRenderer.send('ipc-example', 'ping');
        },
        on(channel, func) {
          const validChannels = ['ipc-example',];
          if (validChannels.includes(channel)) {
            ipcRenderer.on(channel, (event, ...args) => func(...args));
          }
        },
        once(channel, func) {
          const validChannels = ['ipc-example'];
          if (validChannels.includes(channel)) {
            ipcRenderer.once(channel, (event, ...args) => func(...args));
          }
        },
      },
      os:{
        cpuCount: os.cpus().length,
      },
      storage:{
        localPath: app.getPath('userData'),
      },
    });
    

    En el código actualizado, requerimos el módulo de electron y utilizamos el objeto app de él, lo que debería permitirte acceder a la ruta de la aplicación en el script del preloader.

Comments are closed.