Estoy tratando de construir un mini navegador usando Electron.js. ¿Es posible crear URL como chrome://settings o about:config, de modo que cuando el usuario vaya a ese enlace pueda mostrar un archivo html? Básicamente quiero asociar una url con un archivo en electron.
Puede usar URI de datos y codificar en base64 el contenido de sus datos como un enlace. Puede usar Javascript para codificar y decodificar datos binarios, luego solo especifica el tipo MIME al principio.
Si va a la siguiente URL en un navegador, por ejemplo, verá un png decodificado y renderizado:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==El documento web de MDN en el primer enlace menciona el proceso de codificación base64 de un archivo HTML.
Alternativamente, si solo desea forzar la descarga de un enlace, puede agregar el atributo de download a su ancla.
Puede usar did-start-navigation para detectar cuándo van a chrome://settings/ luego interceptarlo y decirle que vaya a https://stackoverflow.com/ en su lugar.
Aquí está el código:
mainWin.webContents.on('did-start-navigation', function (evt, navigateUrl) { if (navigateUrl == 'chrome://settings/') { evt.preventDefault(); setTimeout(function () { // Without this it just crashes, no idea why. mainWin.loadURL('https://stackoverflow.com/'); }, 0); } }); Probé el evento `will-navigate`, pero no funcionó.Después de buscar un poco en npm, encontré un paquete que hace exactamente lo que quiero, son protocolos de electrones . Es una forma sencilla de agregar protocolos personalizados en Electron. Aquí hay un ejemplo"
const protocols = require('electron-protocols'); const path = require('path'); protocols.register('browser', uri => { let base = app.getAppPath(); if(uri.hostname == "newtab"){ return path.join(base,"newtab.html") } }); En este ejemplo, si va al enlace browser://newtab, abre newtab.html. Y si escribes location.href , DevTools muestra browser://newtab allí también