javascript - 渲染器问题中的 Electron 非上下文感知 native 模块

标签 javascript node.js oop electron

我已经尝试了很多方法,但即使使用重建以及我见过的其他示例,似乎也无法执行 robotsjs 代码。

我仍然收到“在渲染器中加载非上下文感知 native 模块”错误。

我有一个按钮,单击该按钮时我希望执行 robotsjs 代码。

这是我当前的代码:

bot.js

        const robot = require('robotjs')
    const electron = require('electron')
    const ipc = electron.ipcRenderer
    
    const Bot = () => {
        const button = document.getElementById('start');
        // button.addEventListener('click', () => console.log('Click'))
        button.addEventListener('click', function (e) {
            // Get mouse position.
            var mouse = robot.getMousePos();
    
            // Get pixel color in hex format.
            var hex = robot.getPixelColor(mouse.x, mouse.y);
            console.log("#" + hex + " at x:" + mouse.x + " y:" + mouse.y);
        });
    
    }
    
    Bot();

我的主文件: 索引.js

    const { app, BrowserWindow, ipcMain } = require('electron');
    const robot = require('robotjs')
    const path = require('path');
    // const Bot = require('./bot')
    // Handle creating/removing shortcuts on Windows when installing/uninstalling.
    if (require('electron-squirrel-startup')) { // eslint-disable-line global-require
      app.quit();
    }
    
    const createWindow = () => {
    
      const mainWindow = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
          nodeIntegration: true,
        }
      });
    
      // and load the index.html of the app.
      mainWindow.loadFile(path.join(__dirname, 'index.html'));
    
      // Open the DevTools.
      mainWindow.webContents.openDevTools();
    };
    
    // This method will be called when Electron has finished
    // initialization and is ready to create browser windows.
    // Some APIs can only be used after this event occurs.
    app.on('ready', createWindow);
    
    // Quit when all windows are closed, except on macOS. There, it's common
    // for applications and their menu bar to stay active until the user quits
    // explicitly with Cmd + Q.
    app.on('window-all-closed', () => {
      if (process.platform !== 'darwin') {
        app.quit();
      }
    });
    
    app.on('activate', () => {
      // On OS X it's common to re-create a window in the app when the
      // dock icon is clicked and there are no other windows open.
      if (BrowserWindow.getAllWindows().length === 0) {
        createWindow();
      }
    });
    
    // In this file you can include the rest of your app's specific main process
    // code. You can also put them in separate files and import them here.

这是index.html

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8" />
  <title>Hello World!</title>
  <link rel="stylesheet" href="index.css" />
 </head>
 <body>
  <div class="App">
   <div class="Header">
    <h1>Checkout-Bot</h1>
   </div>
   <div class="Wrapper">
    <p>Click Start</p>
    <button id="start">Start</button>
   </div>
  </div>

  <script src="bot.js">
   Bot();
  </script>
 </body>
</html>

最佳答案

你读过this issue吗?在 Github 上?

他们删除了使用非 NAPI非上下文感知模块的能力。

如果您尚未使用 Electron 11,您仍然可以使用这些模块,只要在主进程中添加以下行:

app.allowRendererProcessReuse = false

关于javascript - 渲染器问题中的 Electron 非上下文感知 native 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62946337/

相关文章:

java - 抽象对象

java - Value 对象应该包含多少业务逻辑?

javascript - appendChild 到 h2 类

Node.js 安装版本错误。为什么 apt install 不能正常工作?

javascript - Anime.js 动画与 React 的高阶组件

适用于所有环境的 Node.js docker 镜像 - 包括生产环境

node.js - Grunt 安装错误 : "should be installed with -g"

c++ - 无法从其他类的函数访问对象的参数

javascript - 具有多个进程的 PM2 配置

javascript - 将二维不规则形状简化为规则基元