POST送信のページをブックマークするブックマークレット

あるサイトでは検索がPOSTで送信しないと結果が返ってこないので、ブクマできない。

というわけで、ブクマするためのブックマークレットを作った。

javascript:for(var i=0,f;f=document.forms[i];++i)if(f.method.toLowerCase()=="post")(function(f){f.onsubmit=function(){var v=[],g=function(t,c){for(var i=0,n,m=f.getElementsByTagName(t);n=m[i];++i)if(n.name)c(n)},h=function(n){v.push([n.name,n.value])};g("button",h);g("textarea",h);g("select",function(n,i){i=n.selectedIndex;if(i>=0)v.push([n.name,n.options[i].value])});g("input",function(n){if(!/^(checkbox|radio)$/i.test(n.type)||n.checked)v.push([n.name,n.value])});prompt("","javascript:var f=document.createElement(\"form\"),s=\"\",p="+v.toSource()+";f.method=\"post\";f.action=\""+f.action+"\";for(var i=0;i<p.length;++i)s+='<input name=\"'+p[i][0]+'\" value=\"'+p[i][1]+'\">';f.innerHTML=s;document.body.appendChild(f);f.submit()");return false}})(f)

Firefoxでしか動かない(toSource使っているから)。実行してから、POST送信のフォームを送信すると、javascript:から始まるブックマークレットが表示される。それを保存すると今度から、ブックマークからPOST送信で飛べる。

まぁ、form要素作って、送ろうとしたパラメータを中にぶち込んだ奴をdocument.bodyに突っ込んでから、submitするブックマークレットを生成するだけです。リファラーチェックとかされたら無理ぽ。ワンタイムパッドとかあっても無理無理。

当たり前だけど、ログイン画面とかをこれで変換するとかなりやばい感じです。そんなものです。