【问题标题】:electron.js ipcMain and ipcRenderer don't workelectron.js ipcMain 和 ipcRenderer 不起作用
【发布时间】:2021-11-02 22:18:37
【问题描述】:

我尝试使用 ipc 将数据从 main.html 发送到 main.js,但是当我在 yt 教程中尝试该方法时 ipcMain.on 在这里我的代码不起作用:

const electron = require('electron');
const url = require('url');
const path = require('path');
const { app, BrowserWindow, Menu, ipcMain } = electron;
let mainWindow;
app.on('ready', () => {
    mainWindow =  new BrowserWindow({});
    mainWindow.loadURL(
        url.format({
            pathname: path.join(__dirname, "main.html"),
            protocol: "file:",
            slashes: true
        })
    );
    const mainMenu = Menu.buildFromTemplate(mainMenuTemplate);
    Menu.setApplicationMenu(mainMenu);
    ipcMain.on("key", (event, data) => {
        console.log(data);
    });
});
const mainMenuTemplate = [
    {
        label : "Dosya",
        submenu : [
            {
                label : "Yenile",
                role : "reload"
            },
            {
                label : "Çıkış Yap",
                role : "quit"
            },
            {
                label : "Geliştirici Penceresini Aç/Kapa",
                click(item, focusedWindow){
                    focusedWindow.toggleDevTools();
                }
            },
            {
                label : "Bilgi Menüsü"
            }
        ]
    }
];
<h1>Deneme Sayfası</h1>
<button onclick="clicked()">Deneme</button>
<script>
    const electron = require('electron');
    const { ipcRenderer } = electron;

    function clicked(){
        ipcRenderer.send("key", "Veri Deneme");
    }
</script>

(有些部分不是英文的请忽略)

【问题讨论】:

    标签: javascript electron ipc


    【解决方案1】:

    变化:

    mainWindow =  new BrowserWindow({ 
    webPreferences: {
                nodeIntegration: true
            }});
    

    然后移动

     ipcMain.on("key", (event, data) => {
            console.log(data);
        });
    

    之前

    const mainMenuTemplate
    

    对于html页面 你有两个选择:

    1. 将初始化放在页面顶部
     <script>
          const {ipcRenderer} = require('electron')
        </script>
    
    1. 在本地进行初始化
    function clicked() {
      const {ipcRenderer} = require('electron');
       ipcRenderer.send("key", "Veri Deneme");
    }
    

    【讨论】:

    • 我试了一下,控制台给出错误:未捕获的引用错误:在 HTMLButtonElement.onclick (main.html:2) 的点击 (main.html:8) 初始化之前无法访问 'ipcRenderer'
    • 我在 "app.on('ready', () => ..." 中遇到了类似的 ipc 问题。我没有找到它不起作用的原因,而是从渲染器进程向 main 发送消息,使其发送我想要的信息。这很有效。
    猜你喜欢
    • 1970-01-01
    • 2018-12-29
    • 2018-10-03
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2021-07-22
    • 2020-11-03
    • 2017-08-21
    相关资源
    最近更新 更多