Electron BrowserView无法捕获鼠标事件

时间:2019-07-29 19:23:15

标签: javascript electron

我有一个基于电子的浏览器之类的应用程序,需要渲染客户端应用程序。我很想使用electron的webivew来渲染我的应用程序,但是不建议使用它们,并且默认情况下也将其禁用。同样由于Webview背后的铬制OOPIF(进程外IFrames)架构,它不再可能捕获对我的应用程序至关重要的键盘和鼠标事件。

因此,我正在使用较新的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);
  });
});

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

1 个答案:

答案 0 :(得分:3)

通过在浏览器视图中使用预加载webPreferences,可以在ipcRenderer中使用preload.js脚本

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

在主电子js中,您必须使用预加载并调用ipc main来捕获鼠标数据

let view = new BrowserView({
 webPreferences: {
  preload: path.join(__dirname, 'preload.js'),
 }
});

ipcMain.on('something', function (event, arg) {
  // your code here
})