Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

206
Vistas
¿Cómo hacer múltiples ventanas Svelte en Electron?

Para mi aplicación de electrones, me gustaría abrir otra ventana Svelte (o cargar diferentes ventanas/componentes dependiendo de las variables de inicio).

Entonces, digamos que usé este tutorial para configurar una estructura básica, con mi App.svelte luciendo así:

 <script> const openLauncher = () => { window.api.openWindow("launcher"); }; </script> <button on:click={openLauncher}>Open Launcher</button>

Como puede ver, agregué una función IPC para abrir una nueva ventana. El index.js correspondiente:

 const { app, BrowserWindow, ipcMain } = require("electron"); const { join } = require("path"); app.on("ready", () => { const mainWindow = new BrowserWindow({ webPreferences: { preload: join(__dirname, "./preload.js"), } }); mainWindow.loadFile(join(__dirname, "../public/index.html")); }); ipcMain.on("openLauncher", (event, args) => { const launcher = new BrowserWindow({ webPreferences: { preload: join(__dirname, "./preload.js"), } }); launcher.loadFile(join(__dirname, "../public/launcher.html")); });

preload.js :

 const { contextBridge, ipcRenderer } = require("electron"); const API = { openWindow: (obj) => ipcRenderer.send("openLauncher", obj), } contextBridge.exposeInMainWorld("api", API);

Esto funciona y abre una nueva ventana con launcher.html , pero no puedo entender cómo hacer que los componentes de Svelte funcionen en ese nuevo archivo.

Una idea que tuve fue modificar el archivo main.js para que el componente del cuerpo cambie, así:

 import App from './App.svelte'; import LauncherApp from './LauncherApp.svelte'; const bodyID = document.getElementsByTagName('body')[0].id; const app = {}; if (bodyID == "index") { app = new App({ target: document.body, }); } else if (bodyID == "launcher") { app = new LauncherApp({ target: document.body, }); } export default app;

Esto funciona para la ventana principal (es decir, si cambio las ID, carga el componente correcto al inicio), pero como no carga ningún Svelte al abrir la nueva ventana, esto no funciona.

¡Así que realmente agradecería cualquier idea sobre cómo hacer que Svelte se cargue para ventanas/archivos html nuevos/diferentes! Y si hay una manera de hacer esto con SvelteKit, ¡aún mejor!

¡Gracias de antemano!

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

La solución rápida obvia que veo es usar un bloque #if en bodyID en App.svelte que contiene dos componentes, MainApp (contenido de App.svelte ) y LauncherApp, y luego simplemente cambiar bodyID según el modo en que se encuentre.

Al usar sveltekit, creo que tendría sentido tratar a LauncherApp como una ruta separada (creo que esta es la única forma de tener páginas "separadas" con sveltekit, aunque no estoy al 100%). Entonces, al abrir una nueva ventana, navega la nueva instancia de su aplicación a la ruta LauncherApp. Si no desea el mismo diseño base que en la aplicación principal, puede agregar un archivo __layout.reset.svelte .

No sé por qué tu solución no funcionó, fue bastante elegante.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda