IEでpassword表示

140文字以内でパスワード丸見え - latest log
IE対応は結構面倒なんですよね。
まず、IEはinput要素のtypeを書き換えさせてくれないので次のようなスクリプトすら通らない。

var d=document.createElement('div');
d.innerHTML='<form name="f"><input type="text" name="t"></form>';
document.body.appendChild(d);

var t=document.getElementsByName('t')[0];
alert(t.type);// -> text
t.type='password';//ERROR!

そこでouterHTMLで書き換えをする

var d=document.createElement('div');
d.innerHTML='<form name="f"><input type="text" name="t"></form>';
document.body.appendChild(d);

var ts=document.getElementsByName('t');
var t = ts[0];
t.outerHTML=t.outerHTML.replace(/type=text/,'type=password');
alert(t.outerHTML);// <INPUT type=text name=t>
alert(ts[0].outerHTML);// <INPUT type=password name=t>

なお、innerHTML、outerHTMLでの書き換えは中身の要素がまるごと置き換わるので変数の参照が切れる点に注意

ここまでをBookmarkletにするとこう(135文字)

javascript:t=document.all.tags('input');for(i in t)/^p/.test(t[i].type)&&void(t[i].outerHTML=t[i].outerHTML.replace('password','text'))

でも、これだとinput要素が初期化されて空欄になってしまう。肝心のパスワードが消えてしまっては意味が無い…。

それならということで変数に一時退避して戻してあげるとこんな感じ(159文字)。

javascript:t=document.all.tags('input');for(i in t)/^p/.test(t[i].type)&&void(P=(p=t[i]).value,p.outerHTML=p.outerHTML.replace('password','text'),t[i].value=P)

うーん、これを140文字に減らすのは私には無理そうですがプロのゴルファーや伝説のIEマスターならきっと?

ところで、IE用にsandbox for IEみたいなページを用意しておくと何かと便利です。

解答例:Twitter / m_satyr: javascript:for(i in ...Twitter / miya2000: javascript:(function(e){e. ...Twitter / miya2000: with(document.querySelecto ...
要はinputのデフォルトがtextなので、passwordを潰せばOKと。なるほど。

javascript:for(i in t=document.all.tags('input'))(p=t[i]).type&&i[P=p.value,p.outerHTML=p.outerHTML.replace('password',''),t[i].value=P]