5
respostas

Problemas para criar uma janela

Estou com esses 3 problemas:

  • Uncaught ReferenceError: require is not defined at main.js:1

  • Failed to load resource: net::ERR_FILE_NOT_FOUND renderer.js:1

  • Failed to load resource: net::ERR_FILE_NOT_FOUND renderer.js:1

Segue abaixo os programas:

//main.js

const { app, BrowserWindow, ipcMain } = require('electron');


app.on('ready', () => {
    console.log('Aplicaçao inciada');
    let mainWindow = new BrowserWindow({
        width: 600,
        height: 400 
    });
    console.log(__dirname);
    mainWindow.loadURL(`file://${__dirname}/index.html`)
});

app.on('window-all-closed', () => {
    app.quit();
});

ipcMain.on('abrir-janela-sobre', () => {
    let sobreWindow = new BrowserWindow({
        width: 300,
        height: 200
    });

    sobreWindow.loadURL(`file://${__dirname}/html/sobre.html`)
});
//sobre.html

<!DOCTYPE html>
<html lang="pt-br">
    <head>
        <meta charset="UTF-8">
        <title>Sobre Alura Timer</title>
        <script src="/js/renderer.js"></script>
    </head>

    <body>
        <p>Alura Timer. . .</p>
        <p>Para você cronometrar o seu tempo de estudo na alura.</p>
    </body>
</html>
//index.html

<!DOCTYPE html>
<html lang="pt-br">

<head>
    <meta charset='utf-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge'>
    <title>Alura Timer</title>
    <meta name='viewport' content='width=device-width, initial-scale=1'>
    <link rel='stylesheet' type='text/css' media='screen' href='css/index.css'>
    <script src='main.js'></script>
    <script src="/js/renderer.js"></script>
</head>

<body>
    <h1>Olá eu sou uma janela!</h1>
    <a href="#" id="link-sobre"> Sobre </a>
    <script src="/js/renderer.js"></script>
</body>

</html>>
//renderer.js

const { ipcRenderer } = require('electron');

let linkSobre = document.querySelector('#link-sobre');

linkSobre.addEventListener('click', function(){
    ipcRenderer.send('abrir-janela-sobre');
});

Desde já agradeço pela atenção!

5 respostas

Olá, Rhuan! Tudo bem?

Alguns alunos indicaram que esse problema foi resolvido com a seguinte alteração:

let mainWindow = new BrowserWindow({
    width: 600,
    height: 400,

    webPreferences: {
      nodeIntegration: true
    }

  });

Ou seja, no objeto sendo passado para BrowserWindow, indique o trecho webPreferences, com a propriedade nodeIntegration: true.

Se o problema persistir, tente então adicionar outra propriedade ao webPreferences, a contextIsolation: false, ficando:

webPreferences: {
   nodeIntegration: true,
   contextIsolation: false
}

Espero ter ajudado!

Olá, essa é a mensagem que aparece após a alteração:

Segue a baixo o código com a alteração feita:

//main.js

const { app, BrowserWindow, ipcMain } = require('electron');


app.on('ready', () => {
    console.log('Aplicaçao inciada');
    let mainWindow = new BrowserWindow({
        width: 600,
        height: 400,

        webPreferences: {
            nodeIntegration: true,
            contextIsolation: false,
        }
    });
    console.log(__dirname);
    mainWindow.loadURL(`file://${__dirname}/index.html`)
});

app.on('window-all-closed', () => {
    app.quit();
});

let sobreWindow = null
ipcMain.on('abrir-janela-sobre', () => {
    if (sobreWindow == null){
        sobreWindow = new BrowserWindow({
            width: 300,
            height: 200,
        });
        sobreWindow.on('click', () => {
            sobreWindow = null;
        })
    }
    sobreWindow.loadURL(`file://${__dirname}/css/sobre.html`)
});

Rhuan, sobre os erros:

  • Coloque alguns console.log() abaixo das importações, passando as variáveis que estão sendo importadas, para confirmar que estão chegando corretamente;
  • Verifique se em nenhum outro lugar do código você está importando (ou declarando) a variável ipcRenderer, além da importação necessária no renderer.js.

É difícil dizer ao certo se esses erros estão sendo precisos, ou algo silencioso ocorre antes e desencadeia eles.

Se puder, compartilhe seu código completo conosco, seja por um arquivo do Google Drive, ou subindo no próprio GitHub.

Vou mandar um link do drive com meus arquivos: https://drive.google.com/drive/folders/1ybGiop8I-ywOwpbRr7vcS_G9Okuh4s8M?usp=sharing

Rhuan, vi no seu package.json que você está utilizando a versão 13.1.2 do Electron, enquanto o curso é feito na versão 1.6.1.

Eu sugiro que você utilize a mesma versão do instrutor, para garantir compatibilidade com o seu projeto, tanto na aula atual quanto em futuras, senão você tende a encontrar problemas.

A versão do Node também pode conflitar, neste caso o instrutor está com a versão 6.10. Recomendo fazer a troca de versão do Node pelo nvm. Você pode baixá-lo para Windows aqui.

Uma vez as versões alteradas, pode ser que nem seja mais necessário passar as propriedades que eu informei na primeira resposta. E você conseguirá aproveitar o curso mais facilmente.

Abraço!