htsign's blog

ノンジャンルで書くつもりだけど技術系が多いんじゃないかと思います

一部の記号を使わずにゾンビウィンドウを作ってみる

今日、仕事で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))

とするとスッキリすると思う。