====== はてな長年日記UserJSを勝手に添削してみる. ====== meta-author: t.ashula meta-tags: mt,javascript,userjs,hatena meta-entry_id: hatena_naganen_nikki meta-creation_date: 2007-11-20T04:23:46+09:00 僭越ながら勝手に添削.対象は[[http://d.hatena.ne.jp/mattz/20071112/p2|長年日記の前の日/次の日リンクを長年日記的前の日/次の日リンクに変えるUser.js(Opera用) - ま゛]]と[[http://d.hatena.ne.jp/mattz/20071112/p3|というわけでその日の日付見出しの横にその日の長年日記へのリンクをつけるuser.js(Opera用)]]の2つ. 出来上がりは [[http://ashula.info/files/opera/tips/hatena-naganen-nikki1.js]],[[http://ashula.info/files/opera/tips/hatena-naganen-nikki2.js]] 添削と書いてみたが実際にやったのは,3つ4つくらい. まずは''(function(){/*元の本体*/})();''という風に無名関数の中に入れてglobal(window)をいたずらに汚さないようにする.Firefox/Grasemonky と違って,全部のスクリプトから一つの window が参照できるので,シンボルのバッティングなど面倒なことになりかねないので,とくに事情が無ければしたほうがいい. 二つ目は,多少コードを清書.''for''を書換えて,''for( i = 0; i < length; ++i ) a = ar[i]''から''for( i = 0; a = ar[ i ]; ++i )''の形にして多少短縮.''if(hoge){ if (huga){ foo(); }}''を''if(hoge && huga){ foo(); }''に書き換えてネストを削減. 三つ目は,UserJS のコメントをつけて,はてなの日記だけに適用されるように''@include,@exclude''を追加.とくに長年日記へのリンクをつけるほうは,長年日記の場合(''http://d.hatena.ne.jp/id/____'')に適用しても意味が無いので''@exclude''ではじいておく. 四つ目は,…四つ目はとくに無い. 四つ目は, EventListner の登録用の関数を作らないで,直接 ''addEventListener('load', function(){},false)''に変更. 趣味的な問題で,一度しか使わないものは極力名前をつけない方が好み. 基本的には,[[http://www.opera.com/support/tutorials/userjs/|Take Control with User JavaScript]]([[http://jp.opera.com/support/tutorials/userjs/|ユーザー JavaScript による制御]])と[[http://dev.opera.com/articles/view/efficient-javascript/|Efficient Javascript]]あたりを見ながら書くのだけれど,もうちょい実践向きのを step-by-step で誰か書いてくれないかなぁ.