Сегодня столкнулся с такой проблемой: нужно ввести пароль, содержащий русские символы. Но не тут-то было. Safari просто отказалась переключать язык! Простым решением было бы ввести пароль в TextEdit и скопипастить его в поле для ввода пароля, но организм требовал более элегантного решения проблемы. И вот, вспомнив приемы CSS-джитсу и Javascript-фу, превозмогая пятничное стремление пойти напиться или пройти наконец Braid, ваш покорный слуга ринулся в бой...
Решение оказалось на удивление простым, но путь к нему был довольно долгим. Первым и самым очевидным шагом было заменить все поля с типом password на поля с типом text. Но вот как вводимый пользователем текст обратно спрятать? Первым пробным решением было сделать текст прозрачным:
А вот букмарк, который следует перетащить в панель закладок и пользоваться, я (по понятным причинам) здесь разместить не могу. Поэтому приведу лишь его код:
Пользуйтесь на здоровье. ;-)
p.s. Если кто-то знает, как искоренить эту проблемы кардинально, я буду рад выслушать и снести этот пост нафиг. Судя по всему корень проблемы скрыт в недрах самой операционки, т.к. подобным образом себя ведут все поля паролей в Mac OS X (у меня 10.5.7).
Решение оказалось на удивление простым, но путь к нему был довольно долгим. Первым и самым очевидным шагом было заменить все поля с типом password на поля с типом text. Но вот как вводимый пользователем текст обратно спрятать? Первым пробным решением было сделать текст прозрачным:
color: rgba(0,0,0,0)
. Но в этом случае пользователь просто не видел сколько символов он ввел, и пустое ли поле вообще. Короче говоря, после долгих поисков на Surfin' Safari я набрел на замечательное CSS-свойство: -webkit-text-security
! Данное свойство заставляет любую Safari начиная с третей версии показывать вместо текста диски (-webkit-text-security: disk
), кружки (-webkit-text-security: circle
) или квадратики (-webkit-text-security: square
). В результате имеем следующую javascript-функцию:function() {
var F = document.forms;
for(var j=0; j<F.length; ++j) {
var f = F[j];
for (var i=0; i<f.length; ++i) {
if (f[i].type.toLowerCase() == "password") {
var el = f[i];
el.type = "text";
el.style.cssText = "-webkit-text-security: disc";
}
}
}
}
А вот букмарк, который следует перетащить в панель закладок и пользоваться, я (по понятным причинам) здесь разместить не могу. Поэтому приведу лишь его код:
javascript:(function(){var F=document.forms;for(var j=0;j<F.length;++j){var f=F[j];for(var i=0;i<f.length;++i){if(f[i].type.toLowerCase()=="password"){var el=f[i];el.type="text";el.style.cssText="-webkit-text-security:disc";}}}})();
Пользуйтесь на здоровье. ;-)
p.s. Если кто-то знает, как искоренить эту проблемы кардинально, я буду рад выслушать и снести этот пост нафиг. Судя по всему корень проблемы скрыт в недрах самой операционки, т.к. подобным образом себя ведут все поля паролей в Mac OS X (у меня 10.5.7).