Комментарии 91
В системе Flede это сейчас работает в версии 0.73rc, которая доступна с svn. Есть одно пожелание - в firefox под линукс нажатие Ctrl-Ы не срабатывает как Ctrl-S. Это бага firefox, но можно ли пофиксить средствами JS?
Это особенность Лисы именно под Линукс, под вин — всё ОК.
Да, надо потестить. Как только доберусь до Линукса — обязательно починю :-)
Да, надо потестить. Как только доберусь до Линукса — обязательно починю :-)
Это бага именно фаера именно под линукс, лечится вот этим https://addons.mozilla.org/ru/firefox/addon/3529 =)
Это бага линукса и именно хоткеев. В Мозиллу костыли вставить можно, а вот в остальные приложения - проблемно.
Решения вменяемого я так и не нашел. Может поделится кто?
Решения вменяемого я так и не нашел. Может поделится кто?
мне кажется, это баг только gtk, разве нет ? и вроде бы где то я видел решение на эту тему) но может я ошибаюсь, скорей всего так и есть =)
линукса - это вы уж слишком )
скорее GTK, в QT приложениях такого не наблюдается
скорее GTK, в QT приложениях такого не наблюдается
Это _не_ баг GTK. Если не обрабатывать сырое событие "key-press-event", а делать акселераторы, то никаких проблем нет. Сам исправлял подобный баг в gajim.
Большая часть GTK приложений прекрасно понимают шорткаты в любой раскладке.
И, кстати, в Firefox3 баг был исправлен. Но, к сожалению, костылём, который, впрочем, работает лучше, чем вышеупомянутое расширение.
Большая часть GTK приложений прекрасно понимают шорткаты в любой раскладке.
И, кстати, в Firefox3 баг был исправлен. Но, к сожалению, костылём, который, впрочем, работает лучше, чем вышеупомянутое расширение.
Don't try it with other languages/layouts, the result will be unpredictable.
я пользуюсь раскладкой typewriter, у меня этот плагин не будет работать?
Огромное спасибо, оч долго мучался с хоткеями
Поп поводу этого бага в блоге "огненый лис" был топик, где сказано что проблема решена...
Можете почтитаь топик про решение проблемы.
Можете почтитаь топик про решение проблемы.
Эта проблема решена в ff3. А вот 1 и 2 версии останутся без этого фикса :(
Так что, на мой взгляд, при создании хоткеев надо учитывать и это.
Так что, на мой взгляд, при создании хоткеев надо учитывать и это.
извините что дабл пост, но я не нашел как отредактировать сообщение =(
я тут новый...
Вот ссылка на решение проблемы с Лисом в Линуксе:
http://habrahabr.ru/blog/firefox/28589.html
я тут новый...
Вот ссылка на решение проблемы с Лисом в Линуксе:
http://habrahabr.ru/blog/firefox/28589.html
+1
Хороший пост, пишите еще.
Хороший пост, пишите еще.
осталось внедрить на хабр (а лучше - повсеместно, где есть формы) :)
большое спасибо за статью! буду адаптировать код под jQuery и юзать в проектах :)
большое спасибо за статью! буду адаптировать код под jQuery и юзать в проектах :)
Как сделаете решение для jQuery, если Вас не затруднит, отпишите его мне или в комментах. С удовольствием добавлю его в статью.
Прошу простить, не тестировал совсем :) Просто переложил (с некоторыми неточностями, т.к. jQuery, судя по примерам из документации, не знает gecko, но знает msie, opera, safari & firefox). В общем, предлагаю уважаемому сообществу принять участие в разработке :)
var e = "keypress";
if($.browser.msie || $.browser.opera) e = "keydown";
$(document).bind(e, function(evt){
var evt = evt || window.event;
var key = evt.keyCode || evt.which;
var isIE = $.browser.msie || $.browser.opera;
var isGecko = !isIE;
key = !isGecko ? (key == 83 ? 1 : 0) : (key == 115 ? 1 : 0);
if (evt.ctrlKey && key) {
if(evt.preventDefault) evt.preventDefault();
evt.returnValue = false;
clientFunction();
window.focus();
return false;
})
ЗЫ: ногами не бить, с jQuery знаком второй день :)
var e = "keypress";
if($.browser.msie || $.browser.opera) e = "keydown";
$(document).bind(e, function(evt){
var evt = evt || window.event;
var key = evt.keyCode || evt.which;
var isIE = $.browser.msie || $.browser.opera;
var isGecko = !isIE;
key = !isGecko ? (key == 83 ? 1 : 0) : (key == 115 ? 1 : 0);
if (evt.ctrlKey && key) {
if(evt.preventDefault) evt.preventDefault();
evt.returnValue = false;
clientFunction();
window.focus();
return false;
})
ЗЫ: ногами не бить, с jQuery знаком второй день :)
Работает, только у Вас одной фигурной скобки не хватает закрывающей для ифа в конце.
Статья обновлена, спасибо!
Статья обновлена, спасибо!
Лучше положить в статью ссылку rold. Моё решение кривое (у меня оно под IE7 не заработало, а под FF заработало со второго нажатия).
Немного не в тему: встречал однажды интересную реализацию отлова CTRL+S на сайте. При нажатии на данную комбинацию открывался DIV, визуально копирующий окно сохранения файла в MSIE. При нажатии кнопки Save страница якобы сохранялась в MyDocuments и div-чик закрывался.
Разумеется позже, когда пользователь хотел посмотреть сохранённую страницу и искал её в папке с документами, он там её не обнаруживал.
Разумеется позже, когда пользователь хотел посмотреть сохранённую страницу и искал её в папке с документами, он там её не обнаруживал.
На локальную машину без использования хаков или activeX яваскрипт никого не пустить. А вот сделать такую вещь с привлечением сервера никто не мешает.
Например, Вы жмете Ctrl+S, открывается тот самый ДИВ, похожий на браузерный диалог и предлагает выбрать папку на хосте, для сохранения HTML-документа (при участии БД или еще как, не суть). Вы выбираете и сохраняете.
Или в почте — выбрать папку куда положить черновик письма.
Возможностей для реализации можно придумать много.
Например, Вы жмете Ctrl+S, открывается тот самый ДИВ, похожий на браузерный диалог и предлагает выбрать папку на хосте, для сохранения HTML-документа (при участии БД или еще как, не суть). Вы выбираете и сохраняете.
Или в почте — выбрать папку куда положить черновик письма.
Возможностей для реализации можно придумать много.
Вы не совсем меня поняли. Данный функционал явно сделан был чтобы ввести пользователя в заблуждение. Пользователь считал, что страница сохранена, чего по сути не происходило. Видимо, таким образом пытались защитить авторский контент. Хотя не уверен: не было защиты от selection, да и "File -> Save As" работало прекрасно. Имхо - просто разработчику не фиг делать было, вот он и реализовал такую "фичу".
К сожалению не могу дать ссылку, видел это несколько лет назад и сейчас уже адрес ресурса не помню.
К сожалению не могу дать ссылку, видел это несколько лет назад и сейчас уже адрес ресурса не помню.
Я всё прекрасно понял, и предложил вместо бестолкового решения вариант полезного (более-менее) применения :-)
Ну, собственно, в таком случае, простите, Вы изобрели велосипед :)
Схожий функционал реализован у некоторых служб Google (например, GoogleDocs)
Схожий функционал реализован у некоторых служб Google (например, GoogleDocs)
В таком случае я изобрел 2 велосипеда, сама статья тоже неактуальна в виду того, что Ctrl+S уже реализован у Гугла :-)
Боюсь расстроить: http://jshotkeys.googlepages.com/test-st… :)
Другое дело, далеко не всегда желательно подключать большие либы в проекте.
Другое дело, далеко не всегда желательно подключать большие либы в проекте.
Видел уже. Да и когда гмэйлом пользуешься такая реализация сохранения выделяется своим удобством. А вот отдельный скрипт для сохранения нигде не встречал, вот и результат в виде статьи :-)
блин... опять эта страница... люблю я её... какое-то неповторимое ощущение зарождается, когда по нажатию Ctrl+W - ничего не происходит :)
Подкинули бы кармы мне, пост хочу по javascript написать. А то у меня 0 - зарегился неделю назад :)
Совет: не просите карму. Её нужно заслужить, а после таких просьб у кармы имеется тенденция уменьшаться :)
Ну ваше дело :) Если никому неинтересно про то как красиво вписать понятия процесса и потоков и как следствие динамическую подгрузку модулей на javascript.
//
// Dynamic script example.
//
// Load script.
var pLib = new HDynamicScript("Lib\\MapAppTest.js", "Map" ]);
var Map = pLib.GetExport("Map");
var pMap = new Map;
alert(pMap.PrivateData());
Хотел реально полезную штуку осветить, походу тут это не нужно...
//
// Dynamic script example.
//
// Load script.
var pLib = new HDynamicScript("Lib\\MapAppTest.js", "Map" ]);
var Map = pLib.GetExport("Map");
var pMap = new Map;
alert(pMap.PrivateData());
Хотел реально полезную штуку осветить, походу тут это не нужно...
Почему же не нужно?
Считаете полезным другим - пишите, в этом ограничений нет. А если то, что напишите будет действительно полезным, то проблема кармы и переноса из персонального блога в коллективный очень быстро решится :)
Хинт: для записи в персональный блог карма должна быть >= 0
Считаете полезным другим - пишите, в этом ограничений нет. А если то, что напишите будет действительно полезным, то проблема кармы и переноса из персонального блога в коллективный очень быстро решится :)
Хинт: для записи в персональный блог карма должна быть >= 0
Тут Вы ошибаетесь. В персональный блог нельзя писать с нулевой кармой, только комменты.
"опубликовать новый хабратопик в персональный блог — карма >0"
http://habrahabr.ru/info/help/karma/
http://habrahabr.ru/info/help/karma/
именно это и сказал bur :)
Согласен, мой косяк в операторе.
Но суть осталась: m007 вполне иеет возможность писать в блог.
Но суть осталась: m007 вполне иеет возможность писать в блог.
Нет, не осталось.
При регистрации карма = 0.
А писать можно при карме > 0.
Вывод?
При регистрации карма = 0.
А писать можно при карме > 0.
Вывод?
при добавлении коммента карма уже была положительная. А сейчас даже увеличилась. Так что утверждение "m007 вполне иеет возможность писать в блог" верно :)
карма >0
а вы утверждаете, что карма >= 0
;-)
а вы утверждаете, что карма >= 0
;-)
пиши в личный блог. там тебе скажут что надо было писать в блог о яваскриптах, скажешь что кармы не хватает и будет тебе кармы) перенесёшь пост в нужный блог.
Классная штука, мне понравилось. Mac OS X + FF3b5 работает, но в макосях вместо Ctrl+S принято нажимать Command+S, посему диалог появляется, но с Ctrl все работает. На виндовой клаве у меня оно равняется клавише Win.
Дополнение про Mac OS X: Ctrl+Ы на Маке не работает.
Решение для jQuery от GoogleНе совсем корректная фраза, скорее «Плагин для jQuery, размещенный на Google Code» :)
Наверняка, многие попробовали нажать ctrl + S после прочтения заголовка :D
чисто ради интереса, зачем блокировать горячие клавиши?
Если вам нужен интерфейс для сохранения ваших данных, а не HTML-кода страницы, то логично воспользоваться уже существующими хоткеями.
И их никто не блокирует, их переопределяют для сохранения других данных.
И их никто не блокирует, их переопределяют для сохранения других данных.
ничего не понял из вашего ответа :(
если я нажимаю ctrl+s то должна сохраниться страница. для каких целей блокировать это?
если я нажимаю ctrl+s то должна сохраниться страница. для каких целей блокировать это?
Объясню проще.
Ctrl+S — это горячая клавиша для сохранения.
А что сохранять, HTML-страницу или введенные пользователем данные решает уже конкретное приложение.
Есть такой почтовик - Gmail. Так вот, когда я пишу письмо, мне очень удобно по нажатию Ctrl+S сохранять письмо, а не видеть диалог о сохранении страницы.
Здесь речь идет не просто о блокировании Ctrl+S, а о возможности привязать к этому хоткею другое событие.
Ctrl+S — это горячая клавиша для сохранения.
А что сохранять, HTML-страницу или введенные пользователем данные решает уже конкретное приложение.
Есть такой почтовик - Gmail. Так вот, когда я пишу письмо, мне очень удобно по нажатию Ctrl+S сохранять письмо, а не видеть диалог о сохранении страницы.
Здесь речь идет не просто о блокировании Ctrl+S, а о возможности привязать к этому хоткею другое событие.
в таком случае, следует предупреждать большими буквами, что ctrl+s сохраняет письмо, а не страницу. иначе такая юзабильность будет только со знаком "−". В том же GMail'e я вовсе не ожидаю сохранения письма по ctrl+s, хоть это и логично было бы.
Извините за придирство, но это всё равно что взять чью-либо машину и перекрасить в другой цвет.
А за скрипт респектище!
Извините за придирство, но это всё равно что взять чью-либо машину и перекрасить в другой цвет.
А за скрипт респектище!
s/Gekko/Gecko
спасибо, интересно. но лично я считаю, что функция сохранения документа должна лежать на браузере. а для сайта следует определить уровень доступности, что-то вроде предупреждения перед сохранением и служебной информацией для браузера как, что и в каком варианте сохранять. так, думаю, будет грамотней и логичней.
может подкинуть как идейку W3C?:)
может подкинуть как идейку W3C?:)
Что и куда сохранять должно определяться приложением исходя из удобства пользователей. Иначе мы получим враждебный по отношению к юзеру интерфейс. Здесь речь идет исключительно о перехвате хоткея. Никакая служебная информация никуда не уходит, а сохранять можно не только документ.
перехватка хоткея по своей идее вещь не правильная. я говорю о том, что сайт дне должен определять функцию сохранения, в лучшем случае должен указывать браузеру что и как сохранять. отсюда будет и удобство для пользователя и стандарт для сайтостроителя, а для браузера это новая встроенная функция и отсутствие избыточной загрузки яваскрипт кодом.
1) Под сохранения в данном случае подразумевается отправка HTTP-запросов на хост. Это для юзера выглядит сохранением, а для браузера - ничем не примечательный запрос с данными формы.
2) В мозгу пользователя хоткей привязан к событию, а не конкретному действию, и это правильно. Неправильно на Ctrl+S привязывать выделение всего документа или закрытие страницы. А сохранение данных, если есть что сохранять и оно часто требуется - очень правильно повесить на этот хоткей.
2) В мозгу пользователя хоткей привязан к событию, а не конкретному действию, и это правильно. Неправильно на Ctrl+S привязывать выделение всего документа или закрытие страницы. А сохранение данных, если есть что сохранять и оно часто требуется - очень правильно повесить на этот хоткей.
1) я рассуждал о том как можно было бы реализовать эту функцию в будущем;)
2) я согласен с тем, что в голове у пользователя на хоткей Ctrl+S записана одна постоянная функция, не правильным я считаю сокрытие от него факта переделки этой функции и невозможность перенастройки этого хоткея. у браузера есть свой вариант выполнения функции, у авторов сайта свой - получается насильственный запрет функции браузера. а если браузерная функция мне была удобней?
2) я согласен с тем, что в голове у пользователя на хоткей Ctrl+S записана одна постоянная функция, не правильным я считаю сокрытие от него факта переделки этой функции и невозможность перенастройки этого хоткея. у браузера есть свой вариант выполнения функции, у авторов сайта свой - получается насильственный запрет функции браузера. а если браузерная функция мне была удобней?
Как по мне, неудачная идея переопределять стандартное поведение программы. Один сайт будет реагировать на Ctrl-S стандартно, другой иначе, третий вообще непредсказуемо. Будет каша в головах юзеров и разрыв привычных шаблонов.
Предполагаю, что Вы не работали с web-приложениями где это реализовано и не представляете насколько это удобно и естественно :-)
К тому же не стоит втыкать перехват хоткеев по поводу и без повода.
И еще информация для размышления. Часто ли Вы на страницах ежедневно используемых сайтов (почта, поиск) жмете Ctrl+S для сохранения html-кода? :-)
К тому же не стоит втыкать перехват хоткеев по поводу и без повода.
И еще информация для размышления. Часто ли Вы на страницах ежедневно используемых сайтов (почта, поиск) жмете Ctrl+S для сохранения html-кода? :-)
Я, например, работал с приложениями, где это реализовано. И отлично представляю, насколько это неудобно.
Я привык что броузер по ctrl+s/cmd+s сохраняет страничку, а не делает какую-то там другую фигню. Мне не нужную тем более.
Моментально проникаюсь отвращением к сайтам, которые пытаются переназначить хоткеи моего браузера.
Я привык что броузер по ctrl+s/cmd+s сохраняет страничку, а не делает какую-то там другую фигню. Мне не нужную тем более.
Моментально проникаюсь отвращением к сайтам, которые пытаются переназначить хоткеи моего браузера.
Фича очень полезная, знаю по себе, отработана уже привычка если пишешь "долго" некий текст автоматом жмешь ктрл+Ы, от этого зачастую получаю диалог сохранения страницы =) Так что когда в свое время увидел подобную фишку в редакторе tinymce принял на вооружение и использую в некоторых местах.
Полностью согласен, что подобную функциональность веб приложение в праве изменять.
Будем надеяться что данный топик сподвигнет народ использовать подобную функциональность.
ЗЫ и вообще стандартные хоткеев много ) главное не переборщить.
Полностью согласен, что подобную функциональность веб приложение в праве изменять.
Будем надеяться что данный топик сподвигнет народ использовать подобную функциональность.
ЗЫ и вообще стандартные хоткеев много ) главное не переборщить.
key = !isGecko ? (key == 83 ? 1 : 0) : (key == 115 ? 1 : 0);
???
По кейпрессу разные кейкоды в Гекко и Опере.
:)
Я думал, что достаточно будет обратить внимание программиста на строку...
Что ж, еще раз (конкретнее): key == 83 ? 1 : 0
Я думал, что достаточно будет обратить внимание программиста на строку...
Что ж, еще раз (конкретнее): key == 83 ? 1 : 0
Те, кто используют PrototypeJS, могут поставить просто evt.stop(). Он сам определяет, что использовать: evt.preventDefault() или evt.stopPropogation().
Если надо делать в iframe, то для IE строчка определения event выглядеть будет так:
evt = iframe.contentWindow.document.parentWindow.event;
Если надо делать в iframe, то для IE строчка определения event выглядеть будет так:
evt = iframe.contentWindow.document.parentWindow.event;
Имхо, пытаться изменить действие браузера по умолчанию - моветон.
А что, если вы хотите сделать какой-нибудь тул типа wysiwyg-редактора?
Стараться не использовать "браузерные" комбинации. Я привык к тому, что Ctrl+S сохраняет страницу и если кому-то вздумается, что на его сайте будет по-другому, то я больше никогда этот сайт не посещу.
Сколько людей - столько мнений. Лично я привык сабмитить данные по Ctrl-Enter, Ctrl-S - сохранение страницы на диск. Веб-приложение ни под каким предлогом не вправе переназначать пользовательские хоткеи, до тех пора пока это явно не указано юзером в настройках.
НЛО прилетело и опубликовало эту надпись здесь
Привык на маке сохранять cmd+s. почему бы и тут не сделать такой обработчик?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Сохранение по Ctrl+S в браузере