Pull to refresh

Русские пароли в Safari/Mac OS X

JavaScript *
Сегодня столкнулся с такой проблемой: нужно ввести пароль, содержащий русские символы. Но не тут-то было. Safari просто отказалась переключать язык! Простым решением было бы ввести пароль в TextEdit и скопипастить его в поле для ввода пароля, но организм требовал более элегантного решения проблемы. И вот, вспомнив приемы CSS-джитсу и Javascript-фу, превозмогая пятничное стремление пойти напиться или пройти наконец Braid, ваш покорный слуга ринулся в бой...


Решение оказалось на удивление простым, но путь к нему был довольно долгим. Первым и самым очевидным шагом было заменить все поля с типом 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).
Tags: safariwebkitjavascriptcss
Hubs: JavaScript
Total votes 20: ↑16 and ↓4 +12
Comments 47
Comments Comments 47

Popular right now