2014年6月8日日曜日

bookmarklet作成のメモ

飛行機のチケットの予約をする時に、家族全員の名前などを毎回入れるは結構面倒。
特にお盆休みや正月に帰省する時は予約開始時間から直ぐに予約が一杯になるので、もたもた入力している暇も無い。

これまではOperaのextensionを使って入力していたが、Chromeに乗り換えたので今回はbookmarkletを作ってみることにした。
参考にしたのは下記のサイト
ブックマークレット/Bookmarkletの作り方
ブックマークレットを作るときのTips
Bookmarklet を作ってみる

jQueryも使えるようなのでそのうち試してみたい。
ブックマークレットで jQuery を使う魔法の 210 文字

[実際に作ったbookmarklet]
skymarkの予約ページに名前などの情報をセットするjavascriptを作成した。
これをChromeのbookmarkにURLのフィールドに貼り付けたら動いた。
javascript:(function(d,v,n,c){
v=function(n,v){d.getElementsByName(n)[0].value=v};
v("tel","xxxxxxxx");
v("mailAddressPC","xxxxxxxx");
v("mailAddressMB","xxxxxxxx");
c=function(i){d.getElementById(i).checked="checked"};
c("callerSame");
n=function(x,i,r,j,a,s){v(x+"LastName"+i,"xxxx");v(x+"LastNameJ"+i,"xxxx");v(x+"FirstName"+i,r);v(x+"FirstNameJ"+i,j);v(x+"Age"+i,a);c(x+"Sex_"+s+i)};
n("a",0,"xxxx","xx",99,"M");
n("a",1,"xxxx","xx",88,"F");
n("ca",0,"xxxx","xx",9,"F");
n("c",0,"xxxx","xx",4,"M");
}(document))
[文字数制限]
Chromeは6k文字,IEでも2k文字程度は大丈夫な様子。
名前などをなるべく短く書こうとしたが、ちょっとしたことならそこまで無理はしなくて良いかも。
上記のbookmarkletで0,6k文字程度。
ローカル変数の宣言(var)をする代わりに関数の引数を増やすとvarの文字列を省略出来る。

[一行制限]
全てを一行で書く必要があるようだが、Chromeでは上記を改行ありのままでURLフィールドに貼り付けたら勝手に改行が削除されて上手く動いた。
他のブラウザでは上手く行かないのかもしれない。

[URIエンコード]
制御文字(スペース、引用符)や日本語はURIエンコードする必要がある様だが、ChromeではエンコードしないでそのままURLフィールドに貼り付けても上手く動いた。
他のブラウザでは上手く行かないのかもしれない

[名前空間]
bookmarkletは元ページのJavaScriptと同じ名前空間で動作するので、無名関数等使ってbookmarklet内の名前が外側から見えないようにする必要がある。

0 件のコメント:

コメントを投稿