【问题标题】:Electron BrowserView not capturing mouse eventsElectron BrowserView 未捕获鼠标事件
【发布时间】:2019-07-29 19:23:15
【问题描述】:

我有一个基于 Electron 的浏览器,例如需要渲染客户端应用程序的应用程序。我很想使用电子的 webivew 来渲染我的应用程序,但不推荐使用它们,并且默认情况下也禁用它们。此外,由于 webview 背后的 chromiums OOPIF(进程外 IFrame)架构,它不再可能捕获对我的应用程序至关重要的键盘和鼠标事件。

所以我正在使用较新的 BrowserView api 并使用它来呈现我的客户端 Web 应用程序。但遗憾的是,我只能使用before-input-event 事件捕获键盘事件。

这是我的代码示例。

let mainWindow = null;

app.on('ready', () => {
  mainWindow = new BrowserWindow({ show: false });
  mainWindow.setBounds({ x: 0, y: 0, width: 800, height: 600 })
  mainWindow.once('ready-to-show', () => {
    mainWindow.show();
  });

  let view = new BrowserView()
  mainWindow.setBrowserView(view)
  view.webContents.loadURL('https://electronjs.org')
  view.webContents.on('before-input-event', (event, input) => {
    console.log(event, input);
  });
});

我查看了电子的 github 问题和官方文档,但找不到任何东西。有没有人找到一种从 BrowserView 内部捕获鼠标事件的方法?任何帮助将不胜感激。

【问题讨论】:

    标签: javascript electron


    【解决方案1】:

    通过对 browserview 使用 preload webPreferences,您可以在其中使用 preload.js 脚本所在的 ipcRenderer

    document.addEventListener('click', (event) => {
      ipcRenderer.send('something', event);
    });
    

    在主电子js中你必须使用preload并调用ipc main来捕获鼠标数据

    let view = new BrowserView({
     webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
     }
    });
    
    ipcMain.on('something', function (event, arg) {
      // your code here
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      • 2016-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多