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

182
Vistas
No se pueden usar las API de Node.js en el proceso de representación

No se pueden utilizar operaciones relacionadas con electrones o nodos en electron . Obtener el proceso de error no definido. Revisé en varios lugares que guían para agregar soporte de nodo, pero eso ya está hecho, así que me quedé atascado aquí. El código de mi aplicación principal es

 const electron = require("electron"); const { app, BrowserWindow } = electron; function createWindow() { const win = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true }, }); win.loadFile("index.html"); } app.whenReady().then(createWindow); app.on("window-all-closed", () => { if (process.platform !== "darwin") { app.quit(); } }); app.on("activate", () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow(); } });

y el índice.html

 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Hello World!</title> </head> <body style="background: white"> <h1>Hello World!</h1> <p> We are using node <script> document.write(process.versions.node); </script> , Chrome <script> document.write(process.versions.chrome); </script> , and Electron <script> document.write(process.versions.electron); </script> . </p> </body> </html>
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Actualización: la respuesta a continuación es una solución. No debe deshabilitar contextIsolation y no debe habilitar nodeIntegration . En su lugar, debe usar una secuencia de comandos precargada y la API contextBridge .

En Electron 12 , contextIsolation ahora es true por defecto

Si lo establece en false , tendrá acceso a las API de Node.js en el proceso de renderizado.

 function createWindow() { const win = new BrowserWindow({ width: 800, height: 600, webPreferences: { contextIsolation: false, nodeIntegration: true }, }); win.loadFile("index.html"); }

⚠️ ¡Es importante tener en cuenta que esto no es recomendable!

Hay una buena razón por la cual los mantenedores de Electron cambiaron el valor predeterminado. Ver esta discusión

Sin contextIsolation, cualquier código que se ejecute en un proceso de representación puede llegar con bastante facilidad a las partes internas de Electron o a su secuencia de comandos precargada y realizar acciones privilegiadas que no desea que realicen sitios web arbitrarios.

over 4 years ago · Santiago Trujillo Denunciar

0

No hay razón para elevar los privilegios de su renderizador. Cualquier secuencia de comandos de terceros en esa página se ejecutaría con los mismos privilegios y eso definitivamente no es lo que desea.

En su lugar, debe usar un script de precarga que tenga ese privilegio (es decir, puede usar las API de Node.js de forma predeterminada) pero mantenga contextIsolation=true (que es el valor predeterminado de todos modos). Si necesita compartir datos entre su secuencia de comandos de precarga y su secuencia de comandos de representación, use contextBridge .

En mi ejemplo, he expuesto los datos del script de precarga al script del renderizador bajo un espacio de nombres bastante tonto ( window.BURRITO ) para que sea obvio que usted está a cargo:

principal.js

 const {app, BrowserWindow} = require('electron'); //<- v13.1.7 const path = require('path'); app.whenReady().then(() => { const preload = path.join(__dirname, 'preload.js'); const mainWindow = new BrowserWindow({ webPreferences: { preload }}); mainWindow.loadFile('index.html'); });

precargar.js

 const {contextBridge} = require('electron'); contextBridge.exposeInMainWorld('BURRITO', { getNodeVer: () => process.versions.node, getChromeVer: () => process.versions.chrome, getElectronVer: () => process.versions.electron });

renderizador.js

 const onClick = (sel, fn) => document.querySelector(sel).addEventListener('click', fn); onClick('#btn1', () => alert(BURRITO.getNodeVer())); onClick('#btn2', () => alert(BURRITO.getChromeVer())); onClick('#btn3', () => alert(BURRITO.getElectronVer()));

índice.html

 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> <button id="btn1">Node?</button> <button id="btn2">Chrome?</button> <button id="btn3">Electron?</button> <script src="./renderer.js"></script> </body> </html>

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo 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