Перехватывать нажатие клавиши внутри окна браузера, даже если имеется несколько элементов просмотра браузера

#javascript #node.js #electron

#javascript #node.js #electron

Вопрос:

У меня есть приложение Electron с a BrowserWindow , которое содержит index.html для пользовательского интерфейса приложения и несколько BrowserView элементов:

 browserWindow = new BrowserWindow({ width: width, height: height, frame: false });
browserWindow.webContents.loadURL('file://'   __dirname   '/index.html');

var bv = new BrowserView({ webPreferences: { nodeIntegration: false }});
browserWindow.setBrowserView(bv);
 

Я бы хотел иметь сокращения клавиатуры, такие как CTRL X, отовсюду внутри приложения.

  • globalShortcut здесь не в порядке, потому что это относится ко всем запущенным в данный момент процессам. В качестве примера, следующий ярлык будет перехвачен, даже если в фокусе находится другое приложение, отличное от приложения Electron (например notepad.exe )
     globalShortcut.register('CommandOrControl X', () => {
        console.log('CommandOrControl X is pressed')
    })
     
  • Этот метод не подходит, потому что он работает только в том случае, если index.html имеет фокус, но не в том случае, если a BrowserView имеет фокус:
     browserWindow.webContents.on('before-input-event', (event, input) => {
        if (input.control amp;amp; input.key.toLowerCase() === 'x') {
            ...
        }
     

Вопрос: как зарегистрировать сочетание клавиш для текущего окна приложения Electron, работающее, если index.html имеет фокус, но также и если BrowserView имеет фокус?

Ответ №1:

Решение: мы должны запустить этот код для каждого BrowserView webContents :

 bv.webContents.on('before-input-event', (event, input) => {
    if (input.control amp;amp; input.key.toLowerCase() === 'x') {
        ...
    }