揮発性のメモ2

http://d.hatena.ne.jp/iww/

パスワードを表示するブックマークレット


こういうのを見えるようにするブックマークレット

javascript:(function(){
/*
    for each(var e in document.getElementsByTagName("input")){
        if(e.type=="password")e.type="text";
    }
*/
    var a = document.getElementsByTagName("input");
    for(var i=0; i<a.length; i++){
        if( a[i].type == "password" ) a[i].type="text";
    }
})();

hoge.forEach()を使ってみたかったけど、うちのIceWeaselにはそんな関数無かった。
なんかOperaでは動かないなぁと思ったら、for eachfirefox系にしか無いらしい。なんだそれ。


PASSWORD ブックマークレットでググったらなんかいっぱい出てきた。

IE6ではtype変更できないのか・・・みんなtoLowerCase()挟んでるな・・・必要なのかなこれ


こうすればIEでも出来た。いんちきくさいけど

javascript:(function(){
    var a = document.getElementsByTagName("input");
    for(var i=0; i<a.length; i++){
        if( a[i].type == "password" ){
            if( document.all ){
                /* IEのとき */
                p = a[i].value;
                a[i].outerHTML = a[i].outerHTML.replace('type=password','type=text');
                a[i].value=p;
            }else{
                /* IE以外のとき */
                a[i].type="text";
            }
        }
    }
})();

document.allはIEにしか無いので、それで簡易的に分岐してIE依存コードを書ける。
outerHTMLで閲覧できるHTMLは一回DOM化されたものを再構成した文字列になっていて、固定値を持つ要素名や属性は小文字に正規化されるらしく順番がバラバラになる。また、valueは見せてくれない。

HTMLで書いたINPUTタグ
<INPUT TYPE="PASSWORD" VALUE='unko' JACK='aaa' ID=HOGE CLASS=FUGA NAME=PUYO>

outerHTMLで見たINPUTタグ
<INPUT id=HOGE class=FUGA value="" type=password name=PUYO JACK="aaa">


でもブックマークレットなのでブラウザ間の動作互換とか意味が無いのでどうでもよかった。