Tengo una aplicación angular que tiene algunos botones para descargar datos PDF a la PC. Convertí la aplicación web en una aplicación de escritorio con electron. Pero la funcionalidad para abrir documentos en pestañas nuevas ( window.open(url, "_blank"); ) no funciona con electron.
Probé con mainWindow.webContents.setWindowOpenHandler(...) pero esto solo abrirá una ventana en blanco y un diálogo con dónde guardar el archivo...
Lo más cerca que llegué a mostrar una nueva ventana con electron con PDF dentro es usar el siguiente código:
mainWindow.webContents.session.on('will-download', (event, item, webContents) => { my_url = app.getPath("temp") + "/" + item.getFilename(); log.info(`item: ${item.getFilename()}\tURL: ${my_url}`); item.setSavePath(my_url); item.once('done', (event, state) => { let subWindow = new BrowserWindow({ title: item.getFilename(), x: width - mWidth - 3, y: height - mHeight - 3, width: mWidth, height: mHeight, minWidth: mWidth, minHeight: mHeight, useContentSize: false, icon: __dirname + '/src/logo.ico', minimizable: false, maximizable: true, fullscreen: false, frame: true, resizable: true, movable: true, alwaysOnTop: false, webPreferences: { nodeIntegration: true, zoomFactor: 1.0 } }); subWindow.removeMenu(null); subWindow.loadURL(my_url); }); });Básicamente, esto guarda el documento en la carpeta temporal del usuario y luego lo muestra dentro de una ventana, pero por eso crea 2 ventanas, 1 vacía y 1 con el archivo descargado.
Mi pregunta es, ¿cómo podría abrir mi documento dentro de una nueva ventana?
Después de un tiempo, encontré una solución que funciona bien por ahora:
mainWindow.webContents.session.on('will-download', (event, item, webContents) => { my_url = app.getPath("temp") + "/" + item.getFilename(); log.info(`item: ${item.getFilename()}\tURL: ${my_url}`); item.setSavePath(my_url); item.once('done', (event, state) => { let w = BrowserWindow.getAllWindows().reduce((max, current) => max.id > current.id = max : current); w.loadUrl(my_url); }); });Básicamente, la ventana principal obtiene el valor de ID 1 y todas las demás ventanas creadas serán n+1. Así que con esto pondré los datos del PDF en la última ventana creada.