2006年01月13日

firefox拡張で、リクエスト生成時、レスポンス完了時のフック->ヘッダ取得がしたいのだが

Posted by nene2001 at 05:55 / Tag(Edit): / 3 Comments: Post / View / 0 TrackBack / Google Maps このエントリーを含むはてなブックマーク

どうすればいいのだろう?
このエントリに書いたようなことを実現するための実証環境の実装を、本当にぼちぼちとだけど始めてるのだけれども...よく判らない。
firefoxの拡張の作成方法自体は、ここ見て判った。
静的な機能の実装はほとんどできそうな感じ。
でもフックのかけ方とかが判らん。

やりたいのは、

  • Topウィンドウでのリクエスト生成時にフックして、ある条件を満たしていればHTTPリクエストヘッダにカスタムヘッダを加える
  • Topウィンドウでのレスポンス完了時にフックして、HTTPリクエストヘッダ、或いはHTMLヘッダのHTTP-EQUIVのカスタムヘッダの設定値を得る

だけなんだけれども。
似たようなフックをしてそうなLiveHTTPHeader、HTMLValidator、HeaderMonitor(0.2以前)とかを時間の許す限りで読んでみたけど、それぞれ微妙に違うやり方をしてるみたいで、やりたい事を満たすのに必要十分な(かつできればもっとも簡単な)やり方がさっぱり判らない。
誰か知ってたら教えてケロ。

本も買ってみたけど、届いたFirefoxの改造テクニックって本は、得られる情報は先の参考サイトやその周辺、他の拡張読んで判るレベルだけで、 それらがまとまっているのでレファレンスにはなり得るけど全く解決にもならなかった。
オンライン書籍購入はやっぱこういうリスクはあるな。
もう一冊届くFirefox Hacksはどうなんだろうか...。

Firefoxの改造テクニック!―カスタマイズ&拡張機能開発ガイド
大浦 淳
毎日コミュニケーションズ (2005/09)
売り上げランキング: 8,968
おすすめ度の平均: 4
4 順を追ってカスタマイズ方法を理解できる本です

Firefox Hacks―次世代ブラウザ徹底活用テクニック
Nigel McFarlane dynamis 池田 譲治 山本 和彦
オライリージャパン (2005/08/27)
売り上げランキング: 2,557
おすすめ度の平均: 4
3 内容はいいのですが...
4 おすすめです。
5 Firefoxを使うすべての人に必携の一冊

Related query words in Google & Yahoo
Related Books from Amazon
Trackback to this entry
TrackBack URL :
Trackbacks
トラックバックはありません。
Comments

Greasemonkeyではできないんでしょうかね。

Posted by: 増井 at 2006年01月13日 06:55

Greasemonkey のユーザースクリプトでは、読み込み後のコンテンツでしか動かないので無理ですね。

> firefoxの拡張の作成方法自体は、ここ見て判った。

それはちょっと古くて Firefox 1.0 向けです。1.5 でもそのまま使えますが、
1.5 で導入された chrome.manifest ファイルを使うと、
それまで書くのが面倒だった、contents.rdf や、install.rdf の em:file の記述が不要になります。
まあ、一度書いてしまえばおしまいなので、どちらか好きなほうでよいのですが
詳しくは http://www.mozilla-japan.org/projects/firefox/extensions/packaging/extensions.html で。

> 似たようなフックをしてそうなLiveHTTPHeader、HTMLValidator、HeaderMonitor(0.2以前)とか

その中では、
> * Topウィンドウでのリクエスト生成時にフックして、ある条件を満たしていればHTTPリクエストヘッダにカスタムヘッダを加える
に似たようなことをしてるのは LiveHTTPHedaers ですね。

LiveHTTPHeaders.js の
> observe: function(aSubject, aTopic, aData) {
> if (aTopic == 'http-on-modify-request') {
> aSubject.QueryInterface(Components.interfaces.nsIHttpChannel);

の次の行に
aSubject.setRequestHeader("X-YADIS-ID", "hoge", false);
とでも加えると、LiveHTTPHeaders 起動中の全リクエストにカスタムヘッダがつきます。
# 「Topウィンドウ」と「リクエスト生成」は、層が全然違うので
# 「Topウィンドウでのリクエスト生成時にフック」は無理だと思うんですが…
# Topウィンドウ以外ではつけちゃダメですか?

で、ここが呼ばれるように登録しているのはどこか、というと
LiveHTTPHeaders 起動時に LiveHTTPHeaders.js 32行目の startHeaderInfoLive() が呼ばれて
そこから 44行目の addToListener() が呼び出されて、
実際に登録しているのはその中の
> var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
> observerService.addObserver(obj, "http-on-examine-response", false);
というところです。

あとは、いらないところを削るか、あるいは LiveHTTPHeaders もそのまま使うか…

> * Topウィンドウでのレスポンス完了時にフックして、HTTPリクエストヘッダ、或いはHTMLヘッダのHTTP-EQUIVのカスタムヘッダの設定値を得る

# リクエストではなくレスポンスですね?
HTTP のヘッダと、HTMLと、両方見ないといけないんですよね?
そうすると、ヘッダはヘッダであらかじめどこかに保持しておいて、
読み込み完了後に、保持しておいたヘッダと、HTMLとを見る、等としないといけないと思います。

まずその前半の、「ヘッダはヘッダであらかじめどこかに保持」については、
LiveHTTPHeaders の components/nsHeaderInfo.js を丸ごとパクるのが簡単で、かつ必要十分じゃないかと…
これが拡張機能の components ディレクトリに入れてあれば、ページ読み込み後にロケーションバーに
javascript:alert(window.headers.responseHeaders['X-YADIS-Location'])
と入れてみれば、保持できているのが確認できると思います。

後半については、また時間が取れたら…

ところで、このコメントを書くときに、Email Address を入れると、どう使われるんでしょう?

Posted by: あ at 2006年01月14日 10:39

うわ、丁寧にありがとうございます。
もういっぺんチャレンジしてみます。

># Topウィンドウ以外ではつけちゃダメですか?

うーんと、フレーム内に別ページが表示されたらどうしようかとか思ったのですが、よく考えればURI単位でフィルタリングするので、別に構わないですね。

>ところで、このコメントを書くときに、Email Address を入れると、どう使われるんでしょう?

すみません、コメント周りはMTのデフォのままいじってなかったので、リンクされるようになってました。
今、リンクしないようにしました。

Posted by: ねね at 2006年01月14日 22:39
Post a comment












Remember personal info? 
2006年01月
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

About Me

Navigation

Search
Google
Web
kokogiko.net
Archives
Recent Entries
Recent Comments
Recent Trackbacks
わしズムを読んで「アイヌは民族じゃないよ だから先住民族ではあり得ない」というような奴には、「国連先住『部族』の権利に関する宣言だよ」で問題ない(ここギコ!)
わしズム内の一服の清涼剤「るいるいかむい」
姫路のオモシロ寿司屋(ここギコ!)
0系こだまとひかりレールスターに乗ってきた ドクターイエローも見た
姫路のオモシロ寿司屋(ここギコ!)
位置情報ベース広告AdLocalへ一般からも入札が可能に
「定義できない」とのたまうものを自説根拠の説明の中で延々と使う不誠実(笑)(ここギコ!)
文化は変わっていくのは当たり前だからこそ、今問われているのはリアルタイムの選択
現代アイヌの政治運動は利権獲得のためのようだな。(むにゅう!の平和大好き! はてな基地)
文化は変わっていくのは当たり前だからこそ、今問われているのはリアルタイムの選択
的外れですた恥ずかしい Googleは世界標準の絵文字を作ろうとしてるわけではない、少なくとも、今のところ(ここギコ!)
絵文字標準化でのキャリア批判に思うこと
すごい職場の活性法(これが答えだ)
人員がクラスタ化できている職場と言うのはうらやましい そろそろ限界です
文化は変わっていくのは当たり前だからこそ、今問われているのはリアルタイムの選択(ここギコ!)
大和民族の定義云々について
歴史のダイナミズムの元では右翼こそ変わらなければならない(ここギコ!)
右翼はアイヌや沖縄を包摂する論理を構築すべきではないのか
右翼はアイヌや沖縄を包摂する論理を構築すべきではないのか(ここギコ!)
大和民族の定義云々について
Hatena bookmarked
My del.icio.us

Banners

Syndication
Powered by
Get it!!