【问题标题】:Electron non-context-aware native module in renderer issue渲染器问题中的电子非上下文感知本机模块
【发布时间】:2020-07-17 02:48:34
【问题描述】:

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

我仍然在渲染器错误中收到 Loading non-context-aware native module。

我有一个按钮,单击该按钮我希望执行 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();

我的主文件: index.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>

【问题讨论】:

标签: javascript node.js oop electron


【解决方案1】:

你读过 Github 上的this issue 吗?

他们删除了使用 non-NAPInon-context aware 模块的功能。

如果你还没有使用 Electron 11,你仍然可以使用这些模块,如果你在主进程中添加以下行:

app.allowRendererProcessReuse = false

【讨论】:

  • 是的,因为这个问题,我已经切换到 nodegui。
猜你喜欢
  • 2020-05-23
  • 2020-12-02
  • 2020-09-24
  • 2015-12-28
  • 2014-08-13
  • 1970-01-01
  • 2021-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多