« 正規表現をエスケープする方法のメモ | メイン | ミネラルウォーター »

Bookmarxy - iPhone用ブックマークレットの開発用Proxy

iPhone/iPod touch用のブックマークレットを書くのは相当面倒。
iPhone/iPod touchの独自拡張機能、特にジェスチャー系のイベントを利用したい場合、実機上で動かしながら開発したい。
ブックマークレットを、テスト用のページにscript要素で埋め込んで開発する方法もあるけど、色んなサイトで実行させながら開発を行ないたい事もある。
そんな時は、次のようなブックマークレットをiPhoneに登録し、開発環境のwebサーバ上にあるブックマークレットを実行させる方法がある。
(
    function(){
        var bookmarklet_url="ブックマークレットのURL";
        var script_tag=document.createElement("script");
        script_tag.src=bookmarklet_url+"?date="+(new Date()).getTime();
        script_tag.type="text/javascript";
        var heads=document.getElementsByTagName("head");
        var insert_point=heads.length>=1?heads[0]:document.body;
        insert_point.appendChild(script_tag);
    }
)();
この方法で対応可能な場合もあるが、レイアウトを変更するようなブックマークレット開発の場合はページの再読込とブックマークレットの実行が必要で少々手間だ。
そこで、再読込だけでブックマークレットまで実行してくれるプロキシサーバを作ってみた。
名前は、Bookmarklet+Proxyで「Bookmarxy」。
参考にしたのは以下のサイト。
当初、gzipについては全く考慮していなかった。
また、今回は存在しないurlを指定してブックマークレットを読み込んでいるため、HTTPステータスが200を返さない。
このため、正常に動作するJavaScriptが返っても意図した通りに実行されなかったので、HTTPステータスを上書きしている。
gzipとHTTPステータスを解決できたのは、nankiさんの助言のおかげ。
実行環境
iPhone/iPod touchは開発用ウェブサーバと同じネットワークにWi-Fiで接続している事を想定。
設定をうまくやればウェブサーバがインターネット上にあっても可能なはずだが、接続元を制限していないためこのままではセキュリティ的に非常に危ないので、必ず接続元を指定する事。
3G環境ではプロキシを設定できないはずなので対象外。
rubyの標準添付ライブラリに含まれているWebrickというWebサーバを使用しているため、rubyの実行環境が必要。
開発で用いたのは、Ruby1.8.6とWEBrick 1.3.1。
使い方
適当なディレクトリに保存し、実行権限をつける。
LANからインターネットに出るために、プロキシが必要なのであれば、61行目の「:ProxyURI => URI.parse('http://parent_proxy_url:parent_proxy_port/'),」の部分のコメントを外し環境に合わせて書き変える。(開発環境にProxyがないため確認はしていない。)
「bookmarxy.rb」と同一ディレクトリに「bookmarklet.js」というファイルを作成する。
「bookmarklet.js」にブックマークレットを以下のようなフォーマットで記述する。
bookmarklet.js
(
    function(){
        //ここにブックマークレットの本体を記述
    }
)();
ターミナルから「bookmarxy.rb」を実行する。
iPhone/iPod touchの接続先のプロキシ設定に、Bookmarxyが起動している端末のアドレスとポート「8118」を指定する。
iPhone/iPod touchのSafariでサイトにアクセスすると、(ほぼ)全てのページで「bookmarklet.js」内のブックマークレットが実行される(はず)。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

Google

タグ クラウド