IPCRenderer не получает сообщения через ipcmain между страницами - PullRequest
0 голосов
/ 09 января 2020

Итак, я следую этому учебнику , но я просто не могу получить сообщения для перехода по страницам и манипулировать DOM, чтобы создать список под ul

main. js

const electron = require('electron');
const url = require('url');
const path = require('path');

const {
    app,
    BrowserWindow,
    Menu,
    ipcMain
} = electron;

let mainWindow;
let addWindow;

//Listen for app to be ready
app.on('ready', function () {
    //Create window
    mainWindow = new BrowserWindow({});
    //load html to window
    mainWindow.loadURL(url.format({
        pathname: path.join(__dirname, 'mainWindow.html'),
        protocol: 'file:',
        slashes: true,
        webPreferences: {
            nodeIntegration: true
        }
    }));


    mainWindow.on('close', function () {
        app.quit();
    });
    const mainMenu = Menu.buildFromTemplate(mainMenuTemplate);
    Menu.setApplicationMenu(mainMenu);

});

//Handle create add window
function createAddWindow() {
    addWindow = new BrowserWindow({
        width: 300,
        height: 200,
        title: 'Add Shopping List Item',
        webPreferences: {
            nodeIntegration: true
        }
    });
    addWindow.loadURL(url.format({
        pathname: path.join(__dirname, 'addWindow.html'),
        protocol: 'file:',
        slashes: true,
    }));

    addWindow.on('close', function () {
        addWindow = null;
    });
}

ipcMain.on("item:add", function (e, item) {
    console.log(ipcMain); 
    mainWindow.webContents.send('item:add', item);
    addWindow.close();
});

//create menu template
const mainMenuTemplate = [{
    label: 'File',
    submenu: [{
            label: 'Add item',
            accelerator: process.platform == 'darwin' ? 'Command+A' : 'Ctrl+A',
            click() {
                createAddWindow();
            }
        },
        {
            label: 'Clear Items'
        },
        {
            label: 'Quit',
            accelerator: process.platform == 'darwin' ? 'Command+Q' : 'Ctrl+Q',
            click() {
                app.quit();
            }
        }
    ]
}];

if (process.platform == 'darwin') {
    mainMenuTemplate.unshift({
        label: 'Electron'
    });
}

//Add developer tools if not in production
if (process.env.NODE_ENV !== 'production') {
    mainMenuTemplate.push({
        label: 'Dev Tools',
        submenu: [{
                label: 'Toogle Dev Tools',
                accelerator: process.platform == 'darwin' ? 'Command+I' : 'Ctrl+I',
                click(item, focusedWindow) {
                    focusedWindow.toggleDevTools();
                }
            },
            {
                role: 'reload'
            }
        ]
    });
}

mainWindow. js

const electron = require('electron');
const {
    ipcRenderer
} = electron;
const ul = document.querySelector('ul');

ipcRenderer.on('item:add', function (e, item) {
    console.log(456);
    const li = document.createElement('li');
    const itemText = document.createTextNode(item);
    li.appendChild(itemText);
    ul.appendChild(li);
});

mainwindow. html

<!DOCTYPE html>
<html>

<head>
    <title>Calend&aacute;rio</title>
</head>

<body>
    <h1>Calend&aacute;rio</h1>

    <ul></ul>
    <script type="application/javascrip" src="mainWindow.js"></script>
</body>

</html>

addWindow. js

const electron = require('electron');
const {
    ipcRenderer
} = electron;
const form = document.querySelector('form');

form.addEventListener('submit', submitForm);

function submitForm(e) {
    e.preventDefault();
    console.log(567);
    const item = document.querySelector('#item').value;
    ipcRenderer.send('item:add', item);
}

addWindow. html

<!DOCTYPE html>
<html lang="en">

<head>
    <title>Add Shopping list item</title>
</head>

<body>
    <form id = 'fo'>
        <div>
            <label>Enter Item</label>
            <input type='text' id='item' autofocus>
        </div>
        <button type='submit' id='but'>submit</button>
    </form>

    <script type="application/javascript" src="addWindow.js">

    </script>
</body>

</html>

Я действительно не могу передать сообщение в другое окно. Я попытался изменить способ, которым я получаю форму, и изменить канал из прослушивателя событий, но ничего не происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...