2015-01-07 2 views
5

Я просматриваю документацию interwebz и Atom-shell, пытаясь выяснить, как отключить функциональность ключа backspace в окне браузера.Отключить backspace в Atom-оболочке

Я бы предпочел не прибегать к слушателю javascript onkeydown (который работает) и скорее использовать что-то более родное и более на уровне приложения вместо уровня окна браузера.

ответ

2

Единственный способ, которым я решил это сделать без слушателя onkeydown, - это глобальная ярлык и события ipc в электоре api.

Первое заявление об отказе ...

Отключения любой клавиши с глобальным ярлыком действительно отключить ГЛОБАЛЬНОМ на вашем компьютере! ПОЖАЛУЙСТА, ОСТОРОЖНО ПРИ ИСПОЛЬЗОВАНИИ ГЛОБАЛЬНЫХ КОРОТКИХ! Если вы забыли отменить регистрацию своего ярлыка или не будете обрабатывать его должным образом, вам будет трудно исправить вашу ошибку без обратного хода!

Это говорит, что это то, что работает для меня ...

const { app, ipcMain, 
    globalShortcut, 
    BrowserWindow, 
} = require('electron'); 

app.on('ready',() => { 

    // Create the browser window 
    let mainWindow = new BrowserWindow({width: 800, height: 600}); 

    // and load the index.html of the app 
    mainWindow.loadUrl('file://' + __dirname + '/index.html'); 

    // Register a 'Backspace' shortcut listener when focused on window 
    mainWindow.on('focus',() => { 

     if (mainWindow.isFocused()) { 
      globalShortcut.register('Backspace',() => { 

       // Provide feedback or logging here 
       // If you leave this section blank, you will get no 
       // response when you try the shortcut (i.e. Backspace). 

       console.log('Backspace was pressed!'); //comment-out or delete when ready. 
      }); 
     }); 
    }); 

    // ** THE IMPORTANT PART ** 
    // Unregister a 'Backspace' shortcut listener when leaving window. 
    mainWindow.on('blur',() => { 

     globalShortcut.unregister('Backspace'); 
     console.log('Backspace is unregistered!'); //comment-out or delete when ready. 
    }); 
}); 

В качестве альтернативы вы можете добавить ярлык внутри ИИЦ «Тумблер» обработчик событий, как это ...

// In the main process 
ipcMain.on('disableKey-toggle', (event, keyToDisable) => { 
    if (!globalShortcut.isRegistered(keyToDisable){ 

     globalShortcut.register(keyToDisable,() => { 
      console.log(keyToDisable+' is registered!'); //comment-out or delete when ready. 

     }); 
    } else { 

     globalShortcut.unregister(keyToDisable); 
     console.log(keyToDisable+' is unregistered!'); //comment-out or delete when ready. 
    } 
}); 

// In the render process send the accelerator of the keyToDisable. 
// Here we use the 'Backspace' accelerator. 
const { ipcRenderer } = require('electron'); 
ipcRenderer.send('disableKey-toggle', 'Backspace'); 
+0

Почему бы вам заблокировать ключ Backspace для всего приложения? Вы можете просто заблокировать его в своем интерфейсе/рендерере с помощью «нормального» javascript, описанного [здесь, в stackoverflow] (http://stackoverflow.com/a/2768256/1435377) (или аналогичный ответ ниже этого ответа). :) Я знаю, что тема стартера попросила метод nodejs ... по-прежнему не получается, почему - люди должны просто помнить об этом ... (: –

+1

Я согласен, что обычно самый простой способ. этот вопрос спросил, как это сделать, используя Electron и * not * Javascript. Я предполагаю, что более применимым вариантом использования было бы: если вы откроете окно другого приложения или системного диалога, в котором вы хотите продолжить перехват (не блокировать) ключа -Нажмите. – Josh