2015-01-07 20 views
5

Przeszukałem dokumentację interwebz i Atom-shell, próbując dowiedzieć się, jak wyłączyć funkcję back() klucza backspace w oknie przeglądarki.Wyłączanie backspace w powłoce Atom

Wolałbym nie musieć uciekać się do javascripta onkeydown nasłuchującego (który działa) i raczej użyć czegoś bardziej natywnego i na wyższym poziomie aplikacji zamiast poziomu okna przeglądarki.

Odpowiedz

2

Jedyny sposób, w jaki udało mi się to zrobić bez odbiornika onkeydown, to skrót globalny i zdarzenia ipc w aplecie Electron.

Najpierw disclaimer ...

Wyłączenie dowolnego klawisza z globalnego skrótu naprawdę nie wyłączyć globalnie na komputerze! PROSZĘ UWAŻAĆ PRZY UŻYCIU GLOBALNYCH SKRÓTÓW! Jeśli zapomnisz wyrejestrować skrót lub nie będziesz go obsługiwać poprawnie, trudno będzie naprawić swój błąd bez backspace!

Powiedział to, co pracował dla mnie ...

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. 
    }); 
}); 

Ewentualnie można dodać skrót wewnątrz IPC „Przełącz” obsługi zdarzenia jak to ...

// 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

dlaczego chcesz zablokować klawisz Backspace dla całej aplikacji? Możesz po prostu zablokować go w swoim interfejsie/rendererze za pomocą "normalnego" javascriptu, opisanego [tutaj na stackoverflow] (http://stackoverflow.com/a/2768256/1435377) (lub podobnej odpowiedzi poniżej tej odpowiedzi). :) Wiem, że starter tematu zapytał o drogę nodejów ... nadal nie rozumiem dlaczego - ludzie powinni tak po prostu mieć na uwadze ... (: –

+1

Zgadzam się, to zwykle jest najłatwiejszy sposób. to pytanie zadano pytanie, jak to zrobić, używając Electron i * nie * Javascript. Wyobrażam sobie bardziej odpowiedni przypadek użycia: jeśli otworzysz okno inną aplikację lub dialog systemowy, w którym chcesz kontynuować przechwytywanie (nie blokować) klucza -naciśnij. – Josh