一部の記号を使わずにゾンビウィンドウを作ってみる
今日、仕事でWindowsCEを搭載した電話機を触ってた。
ブラウザ機能があって、IE5.5か6相当のレンダリング機能を有したWeb体験を提供してくれる。
で、筐体が電話機なもんだからキー入力がとても辛い。ガラケーよりキツい。
その上記号が全然打てない。
具体的には、使える記号は.@_()-#*,!?&/:\
が全て。
「かっこ」って打って変換しても{}
や[]
なんて出やしない。
それでも無理やりJavaScriptをアドレスバーに書いて遊んでた。
ではコード。
window.attachEvent( String(/onunload/).slice(1,-1), Function((String(/window\\.open(location\\.href,null)/).replace(/\\/g,String(0).slice(1))).slice(1,-1)) )
頑張ってString#fromCharCode
を使わない方向で行ってみました。
これ使うとなんでも書けちゃうから面白く無いし。
/
は使えるので、これで挟むことでRegExpオブジェクトとして任意の文字列を存在させることができる。
\
も使えるので一部記号のエスケープも問題ない。
関数については、function(){}
といった記述だとブレースが出てくるので書けない。
その代わりにFunctionコンストラクタを使う。これなら中身は文字列なので、上記の方法で解決する。
ちなみに旧来のIEで動かすことしか想定してないのでDOM標準からはかけ離れたコーディングに。
=
が使えないのが辛かった。
今回は単純なコードなので使わなかったけど、String(/hoge/).slice(1,-1)
の中で更にString(/fuga/).slice(1,-1)
を使いたい場面が出てくることもあると思う。
そんな時は無理に入れ子にせずに、
Array(String(/hoge/).slice(1,-1),String(/fuga/).slice(1,-1),String(/piyo/).slice(1,-1)).join(String(0).slice(1))
とするとスッキリすると思う。