Отключить сохранение при комбинации Ctrl + S
Здравствуйте!
Мне нужно при комбинации клавишь Ctrl + S отключить сохранение страницы браузера, а вместо этого вызвать свой метод. Пока сделал такую структуру кода и остановился на отключении сохранения страницы: const app = { event() { document.addEventListener('keydown', this.keyboard.bind(this)); }, keyboard(e) { function listenerS(e) { if (e.code === 'KeyS') { this.save_options(); } else document.removeEventListener('keyup', listenerS.bind(this)); } if (e.key === 'Control') { document.addEventListener('keyup', listenerS.bind(this)); } }, save_options() { // ...Метод вызываемый при нажатии Ctrl + S } } app.event(); Собственно вопрос: как отключить сохранение при комбинации Ctrl+S ? Так же прошу подсказать и наставить на путь истинный по вопросу какие клавиши добавить не для Windows систем. В общем задача такая чтобы при нажатии Ctrl + S (или равнозначной комбинации в др. осях) вызывать свой метод, а не сохранение страницы. |
Как то сложновато все.
А почему не просто document.addEventListener('keydown', (ev) => { if (ev.code == 'KeyS' && ev.ctrlKey) { ev.preventDefault(); save_options(); // alert ('Ctrl+S') } }); В любом случае ev.preventDefault() |
Цитата:
const app = { event() { document.addEventListener('keydown', this.keyboard.bind(this)); }, keyboard(e) { if (e.code == 'KeyS' && e.ctrlKey) { e.preventDefault(); this.save_options(); } }, save_options() { // ...Метод вызываемый при нажатии Ctrl + S } } app.event(); А для Мас не подскажите, там вроде кнопки Ctrl нету, а вместо неё кнопка Cmd (если не ошибаюсь). Как эту кнопку правильно прописать? |
Цитата:
На MAC это клавиша Command, на Win - клавиша Windows. |
Спасибо!
if ((e.code == 'KeyS' && e.ctrlKey) || (e.code == 'KeyS' && e.metaKey)) Надеюсь правильно записал. А такой вариант записи условия не будет ошибкой: if (e.code == 'KeyS' && ( e.ctrlKey || e.metaKey)) или здесь будет уже не та логика которая нужна? |
Увидел отредактированное сообщение, то есть получается в условии достаточно прописать:
if (e.code == 'KeyS' && e.metaKey) {} и работать будет для всех систем. Я правильно понял? |
Логика та же.
Но есть один момент. meatKey - это клавиша Win на винде. Win+S тоже чего то там вызывает из системных приложений. Что бы не заблокировать это придется проверять, что у нас за система Mac или Win Обычно проверяют так let isMac = navigator.appVersion.toUpperCase().indexOf("MAC")>-1 Но свойство appVersion обозначено, как устаревшее, а вместо него нужно использовать platform. Думаю, не будет ошибкой написать let isMac = navigator.platform? navigator.platform.toUpperCase().indexOf("MAC")>-1 : navigator.appVersion.toUpperCase().indexOf("MAC")>-1 Ну а дальше if (e.code == 'KeyS' && ( isMac && e.metaKey || e.ctrlKey)) |
Цитата:
|
Цитата:
Спасибо большое за помощь! |
Часовой пояс GMT +3, время: 12:13. |