| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > Обработка нажатия Ctrl+S |
| Автор: Burrr 7.10.2007, 17:52 | ||
| Задача, обработать нажатие Ctrl+S в браузере. Для этого необходимо отменить дефолтное действие браузера: вылезание диалога о сохранении страницы + выполнить свою функцию. Написал следующее:
В ИЕ работает на ура! А вот в ФФ и Опере появление алерта сопровождается появлением браузерного окна сохранения. Помогите, плз, пофиксить! |
| Автор: dstorm81 8.10.2007, 09:49 |
| 2 уважаемый Burrr походу дела, кроссбраузерно это никак не прокатит (осел исключение из правил) ибо Горячие клавиши ловятся хуками системы. И выполняющиеся скрипты тут ничего не поделают. Они могут ловить нажатия и обрабатывать по-своему, но запретить их обработку приложением (в данном случае браузером) они не могут. |
| Автор: Burrr 8.10.2007, 10:06 |
| dstorm81, есть пример работоспособности такого скрипта в Гекко. В почте gmail такая фича прокатывает и в ФФ, то есть при написании письма можно нажать СTRL+S, при этом письмо сохраняется по AJAX и диалог не появляется. Интересно, как они заблочили окно диалога. В кода гмейловой почты разбираться бесполезно, если кто не пробовал - можете попытаться. |
| Автор: Avb 8.10.2007, 10:42 | ||
| Burrr, недавно реализовывал подобную вещь. Пришел к такому выводу: Чтобы иметь возможность остановить поведение браузера по умолчанию при нажатии hot keys, необходимо обработчик навешивать не с помощью addEventListener/attachEvent, а как свойство document. Причем для ИЕ и Webkit-а - onkeydown, а для остальных - onkeypress.
P.S. Prototype.Browser.IE = !!(window.attachEvent && !window.opera); Prototype.Browser.WebKit = navigator.userAgent.indexOf('AppleWebKit/') > -1; P.P.S. Я пользую: var key = event.keyCode || event.which; |
| Автор: dstorm81 8.10.2007, 12:05 |
| только что заркгился на мыле пытаюсь ответить на 1 письмто то которое от [email protected]> нажимаю на ctrl+s выходит окно сохранения документа мой браузер k-meleon может пожелеешь пользователей и не будешь их лишать привычных раостей, забинди на ctrl+enter к примеру |
| Автор: Burrr 8.10.2007, 15:15 | ||
| Avb, спасибо за полмощь! Пара поправок: 0) НЕ работает в Гекко :( Фаер просто кажет диалог сохранения.... 1) Моя функция добавляет обработчики событий (мало ли, а то вдруг там еще чего повесили для обработки клавиш), а document.onkeypress || document.onkeydown стирает старые, что плохо. На практике разницы между 2-мя подходами не обнаружил. НО, зато заработало в Опере! УРА! Пока финальный код такой:
dstorm81, k-meleon - какой-то КДЕшный обозреватель? Тогда не знаю работает ли там сохранение в ГМЭЙЛ. Одно скажу точно - в ФФ работает! А насчет пользователей. Эта штука пишется для админки, где измененные данные будут уходить по AJAX-у. Для таких целей фича очень полезная... |
| Автор: Burrr 8.10.2007, 15:34 | ||
Решил привязать сохранение к сочетанию shift + S:
Но если подскажите как окно сохранения заблокировать в Гекко, буду крайне благодарен! |
| Автор: Avb 8.10.2007, 15:50 |
Возможно. Я ctrl+s не проверял. Я использовал сочетания ctrl+1, ctrl+2 и т.д. В ФФ по умолчанию - это переключение между табами. Так вот пока я использовал addEventListener и моя функция отрабатывала, и табы переключались. Когда сделал так как описал выше, табы переключаться перестали. Burrr, попробуйте так как я описал. Хотя бы ради интереса. И отпишите, плиз, что получилось. |
| Автор: Burrr 8.10.2007, 15:55 |
| Avb, ессно попробовал, но к сожалению без результата. Поэтому в конечном счете остановился на своем более "мягком" варианте добавления обработчика события. Спасибо за помощь! +1 |
| Автор: Avb 8.10.2007, 16:10 | ||
| Burrr, нет уж, так легко Вы от меня не отделаетесь. Как я уже писал, чтобы остановить стандарное поведение ФФ нужно использовать onkeypress, а он в onkeypress на нажатие s возвращает код не 83, а 115. С кодом 115 в ФФ работает. Только что проверял. Добавлено @ 16:12 Вот использую этот код для тестов (по-моему я его здесь на форуме и взял, немного подредактировав):
|
| Автор: Burrr 8.10.2007, 16:58 | ||
| Avb, браво! Получилось! Кроссбраузерный вариант (проверено в ИЕ6, ФФ1.5, НН7.1, Опера7.1, Опера9.1 - всё win):
Спасибо тебе огромное, человечище! Если не сложно - проверьте под МАКом и Линуксом... |
| Автор: Avb 8.10.2007, 17:04 |
Вот! Другое дело! Всегда рад. |
| Автор: Burrr 9.10.2007, 12:15 |
| Вот что получилось в итоге (вычищенный код): http://fastcoder.org/javascript/36.html |
| Автор: Fubu_By 21.11.2007, 21:49 |
| а как отключить кнопку "просмотр исходного кода"? |
| Автор: Egor__ 5.12.2007, 13:14 |
| подскажите почему не работают обработчики для IE : <input name="e" type="button" value="вызов addEventListener" onmouseover="status='Переход к карте сайта' return true;" onmouseout="status='false'; return false;"> исходный: <form name="m"> <input name="e" type="button" value="вызов addEventListener" > Для оперы <p></p> <input name="e" type="button" value="вызов addEventListener" onmouseover="status='Переход к карте сайта' return true;" onmouseout="status='false'; return false;"> Для IE <p></p> </form> <script> function w(){status='Переход к карте сайта'; return true;} function q(){status='false'; return true;} m=document.m; m.addEventListener("mouseover", w, true); m.removeEventListener("mouseout", q, true); </script> |