开发者问题收集

如何将数据从我的 main.js 发送到我的 index.html (Electron)

2021-07-01
2426

我是 JavaScript 和 Electron 的完全初学者,仅供您参考。

我想我已经找遍了大多数地方,但我没有找到任何东西。

index.html

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>??</title>
    <link rel="stylesheet" href="style.css">
</head>

<body>
    <div class="main">
        <button id="get-data" type="submit">Get Data</button>
    </div>

    <script src="script.js"></script>
</body>

</html>

main.js

const { app, BrowserWindow } = require("electron");
const ipc = require("electron").ipcMain;

app.whenReady().then(() => {
    const window = new BrowserWindow({
        "center": true,
        "width": 500,
        "height": 800,
        "webPreferences": {
            "nodeIntegration": true
        }
    });
    window.loadFile("index.html");
});

ipc.on("uhhm", event => {
    event.sender.send("ok", "Hello World!");
});

script.js

const ipc = require("electron").ipcRenderer;
const getDataBtn = document.getElementById("get-data");

getDataBtn.addEventListener("click", () => {
    ipc.send("uhhm");
    ipc.once("ok", data => {
        getDataBtn.innerHTML = "Moving On... " + data;
    });
});

我收到此错误:

Uncaught ReferenceError: require is not defined
    at script.js:1

我不知道该怎么办

有什么建议吗?

2个回答

如果您使用的是 >= 5 版本的 Electron,则需要启用 nodeIntegration 和 contextIsolation 参数,如下所示:

app.on('ready', () => {
    mainWindow = new BrowserWindow({
        webPreferences: {
            nodeIntegration: true,
            contextIsolation: false,
        }
    });
});
Henrique Viana
2021-07-01

我使用 Electron Framework 一段时间时遇到过这个问题,我需要在渲染器进程和主进程之间进行 IPC 通信。渲染器进程位于脚本标记之间的 HTML 文件中,并生成相同的错误。

const {ipcRenderer} = require('electron')
//throws the Uncaught ReferenceError: require is not defined

对于你的情况:


const ipc = require("electron").ipcRenderer;

你必须通过在浏览器窗口(嵌入此 HTML 文件的位置)最初在主进程中创建时将 Node.js 集成指定为 true 来解决这个问题。

function createWindow() {

    // Create a new window
   const window = new BrowserWindow({
        width: 300,
        height: 200,

        // The lines below solved the issue
        webPreferences: {
            nodeIntegration: true
        }
})}

这为我解决了这个问题。解决方案已在 此处 提出。

Ala Eddine Menai
2021-07-01