アスタリスクで隠されたパスワードを確認する方法
javascript:(function(){var s,F,j,f,i; s = ""; F = document.forms; for(j=0; j<F.length; ++j) { f = F[j]; for (i=0; i<f.length; ++i) { if (f[i].type.toLowerCase() == "password") s += f[i].value + "\n"; } } if (s) alert("Passwords in forms on this page:\n\n" + s); else alert("There are no passwords in forms on this page.");})();
こういうのを見ると、無意味にコードを短くしたくなる変な癖がある。
ということで、簡単にして短縮したのが↓
javascript:for(var i=0,s='',e=document.getElementsByTagName('input');i<e.length;i++)if(e[i].type=='password')s+=e[i].value+'\n';alert(s||'no passwords')
ブックマーク
元のバージョンはdocument.formsを走査しているので、form要素の中のパスワードフィールドしか拾えないっぽいので、document.getElementsByTagName('input')で全input要素を取得するように改造。
(function() { ... })()でくくってないから変数汚染を起こす可能性があるが、問題になる可能性は低い。どうしても変数汚染を避けたければ↓のバージョンで。
javascript:(function(i,s,e){for(;i<e.length;i++)if(e[i].type=='password')s+=e[i].value+'\n';alert(s||'no passwords')})(0,'',document.getElementsByTagName('input'))
ブックマーク
車輪の再発明
ってことはわかってるんだけど、何でこんなことをやってしまうんだろうな。
追記1
弾さんが同じことやってた!
追記2
id:amachangさんだったら、document#evaluate()を使って
javascript:(function(s,e,t){while(t=e.iterateNext())s+=t.value+'\n';alert(s||'no passwords')})('',document.evaluate('//input[@type="password"]',document.body,null,XPathResult.ANY_TYPE,null));
ってやったりするのかなー