Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

185
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!