LDRize version 20082007.08.28 の変更点に関して *

変更点がやたら多くなったのでエントリにします。

その前にまず、ありがたいことにこちらで現状(LDRize version 2007.08.24)のまずいところを沢山指摘していただきました。
あまり考えが整理されておらず、もやもやしながらも漠然と
「おっ!こうしたら便利そう!!!!11」と考えて書いた部分もありました。
そのせいでデータと処理の分離などという何度も勉強したはずの基本的な知識をすっかり失念してしまっていました。
siteinfoの利点を挙げられた時点で、もう、穴に入って死にたいくらい恥ずかしいうえに、数名にブクマされていて
「なんという公開羞恥プレイ…orz」状態になって、久しぶりに布団にくるまってゴロゴロしました。
「なあに、かえって免疫力がつく」を合言葉に復帰。感謝してます。仕様変わってすみません(Reblogのやつ)。

ミニバッファの独立 *

LDRize以外からも便利だと思ったので独立させました。

それぞれのGreasemonkeyの作者の方が対応させる必要はありますが…
SBMCommentsViewerのようにGreasemonkey的には常に実行していてショートカットキーで使う系のGreasemonkeyが増えると
ショートカットキーを覚えていられなくなると思います。(少ないうちは問題ないかもしれませんが)
というかどれに割り当てるか悩むのが面倒です。めったに使わないものはなおさらです。
ローカルアプリケーションでいうと、今まではホットキー型のランチャ(userChrome.jsやJSAを使えばメニュー形も)しかなかったのが、
コマンド型のランチャも使えるようになった感じです。

siteinfo のパラメータ(?)を追加 *

name view disableの3つが増えました。用途は後述します。

  • name
    • 文字列
    • 他のsiteinfoと重複しないようにする。
  • view
    • XPath
    • paragraphからの相対的なXPath
  • disable
    • trueのみ指定可

siteinfoのインタラクティブな変更(デフォルトはsキー) *

LDRizeを使うことによって利用不可能になったIJKをエミュレートすることが目的です。
前にも例に出したこんなページこのGreasemonkeyを適用したこんなページの画像だけを見たい!という場合に便利だと思います。
他にも、任意の拡張子(zipとか)のファイルへのリンクだけをjkで移動できるようにするなどが考えられます。
ミニバッファでsiteinfoを選択することで切り替えるために、各siteinfoに識別子=名前=nameをつけました。

siteinfoの切り替え(javascriptによる条件判定) *

インタラクティブな切り替えは、ユーザが好きなタイミングでミニバッファ経由でsiteinfo名を選択して切り替えますが、
javascriptを使って、ある特定の条件に合う場合は勝手にsiteinfoを切り替える、ということが出来るように。

window.LDRize.setSiteinfo(siteinfo_name)

スクリプト側では名前だけを指定すればいいので、一応XPathのデータ自体はスクリプトから切り離されますが、ちょっと微妙だと思ってます。
でもsiteinfo側にjavascriptを埋め込むのもどうかと思ってます。(知らない間に変更されてて、知らない間に変なことをされたらたまらない)

キーバインドの変更(または追加) *

javascriptを使って、ある特定の条件に合う場合は自動でキーバインドを変更・追加できるように。
たとえばリンクつきのimgタグがあればiでIJKを有効にする、など。

window.LDRize.setBind(key, func, description)

keyは文字列("C-a"とか)、funcは関数、descriptionは?のヘルプ用

ピンの実態とピンリスト(?)(右下のアレ)の表示を分離 *

LDRize_tumbler_dashboard_reblogのスクリーンショットで、
ピンを付けたparagraphの一覧に全部同じ画像が付いてるのをみると、さすがにlink(飛ぶ先)と表示する要素も分離させた方が良いと思いました。
siteinfoにviewがあればそのXPathに一致する要素を右下のピンリストに表示します。
なければparagraphの1行目らへんから適当に取ってきます。(あまり厳密にはできませんでした)

実行しないURLをsiteinfoで表現 *

LivedoorReaderやFastLadder,Gmailなど、jkを使うWebアプリケーションではLDRizeは動いて欲しくありません。
ですが、IKJのような全てのページで有効になりえるsiteinfoが入ると、どうしても誤爆してしまいます。
Greasemonkeyには標準で、指定したURLでは実行しないようにできますが、jkを使うWebアプリケーションのURLを1人で全て列挙なんて無理です。
なので、siteinfoのdisableをtrueにしたら@excludeのように働くようにしました。
siteinfoの「気付いたら設定されてる」「誰かが設定したら他の人全てに恩恵がある」らへんの特徴を活かせます。

pukiwikiの文字コード *

これは別に気にしなくてもいいのですが、一応変更点なので報告。
なぜか(よく分かりません)UTF-8以外のマルチバイト文字をGM_XHRでとってこれなかったので、
今まではXPathに日本語が混じるsiteinfoはスクリプトに直接書かないと動きませんでした。
これを、Pukiwikiの自作Plugin(ldrize.inc.php)をいじって文字コードを変換するようにしてやったので、日本語をsiteinfoに混ぜてもちゃんと動くようになりました。

速度 *

いくつか高速化。痛いニュースとかパラグラフが1000個を超えるような場所でjkするともたついたのがカナリ良くなった。
(ただ、痛いニュースのようにHTML構造が酷くてテキストノードを選択せざるを得ない場合は、テキストノードから位置が取得できないために、強制的にspanタグを付けているのだけれど、その部分はかなり遅い。改善策を考える必要があるかも。まったく思いつかないけど。)

実行するタイミング *

コメントにてbluerabbitさんが他のGreasemonkeyと競合してうごかなくなる、と教えていただいたき、試しにwindowのloadに引っ掛けていたのですが、
windowがloadされるタイミングというのは画像も何もかも読み込まれた後なんですね。先日ものすごく遅いときがあって、「これはいかん」と思いました。

documentのDOMContentLoadedで実行されるほうが早く使えるようになる

と教えていただいたので、少し調べてみると、どうやらGreasemonkeyスクリプトの実行自体がdocumentのDOMContentLoadedのようなので、ファイルの末尾で普通に実行することにしました。
他のGreasemonkeyとの競合する問題係は[ユーザスクリプトの管理]で並び替えると読み込まれる順番が変わるみたいなので、それで調整していただければ。

追記 (2007.08.28)
―――しまった。
時代を先取りしすぎた。
まだ2007年だったorz

Tag: diary GreaseMonkey - diary/2007-08-28 - 10:38:26

TrackBack(76)
  • 日本語の文字化けはGM_xmlhttpRequestのoverrideMimeTypeパラメーターが関係あるかも。AutoPagerizeとかも使ってます。 -- br? 2007-08-31 (金) 12:33:33
  • なるほど。今回はPHP側で対処できたので、次回ハマったら参考にさせていただきます! -- シロ? 2007-08-31 (金) 21:12:02


トップ   編集 凍結 差分 BACKUP 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-08-31 (金) 21:12:02 (3463d)