金利0無利息キャッシング – キャッシングできます

 | 

2009-12-29

LDRの未読件数を表示するGoogle Chrome拡張機能作った

03:52 | LDRの未読件数を表示するGoogle Chrome拡張機能作った - 金利0無利息キャッシング – キャッシングできます を含むブックマーク はてなブックマーク - LDRの未読件数を表示するGoogle Chrome拡張機能作った - 金利0無利息キャッシング – キャッシングできます

誰か作ってるだろと思ってギャラリー検索したけど見つからなかったので作った。

https://chrome.google.com/extensions/detail/ifekfcjbnkflfndoahjigdhlhgndkncb

os0xさんが技評の連載のサンプルで作ってたやつの改造、あとGoogle Mail Checkerのソースなども参考にした。

http://gihyo.jp/dev/serial/01/chrome-extensions/0001

変更点は

  • id入力 → 表示の際にスクレイピングしてlocalStorageに保存
  • 指数表示 → Kの方が親しみやすいだろうと思ったのでKにした。10000は10K

一方的にスクリプトを適用するのは簡単で、bookmarkletGreasemonkeyスクリプト相当の拡張は簡単に作れそう。

  • 特定URLに対してスクリプト実行はcontent_scriptで可能
  • ブックマークレット相当のことはchrome.tabs.executeScriptで可能

ただし、拡張側から現在表示中のタブの中身のDOMを直接参照したりは出来ないっぽかった。

tabオブジェクトのプロパティからURLやtitleは取れるが、DOMは取れない。

http://code.google.com/chrome/extensions/tabs.html#type-Tab

これはセキュリティ上の制約と言うことだろうから

  • livedoor Readerのドメインにcontent_scriptを適用、メッセージ送信を受け取れるようにする。
  • livedoor Readerを表示していたら拡張機能がメッセージを送る、content_scriptが表示中のDOMからlivedoor idを取得して返す。
  • 拡張機能がcontent_scriptからのレスポンスを受信してlivedoor idをlocalStorageに保存

と言う方法を取った。

os0xos0x2009/12/30 07:22こんにちはー。再利用ありがとうございます。
拡張側とページ側はプロセスが分かれているので、直接アクセスすることができません。これはセキュリティ上の理由でもあり、実装上の都合でもあり。
chrome.tabs.executeScriptはcontent_script相当の処理を拡張コンテキストからプログラマブルに実行するAPIなので、ブックマークレットとはコンテキストが異なります(ページ側のコンテキストと分かれている)。
ブックマークレット(ページ側のコンテキスト)としてスクリプトを実行したい場合は、chrome.tabs.update({url:'javascript:/**/'}); のようにすると実行できます。
もう少し詳しい話はこちらに書きました http://groups.google.co.jp/group/chromium-extensions-japan/browse_frm/thread/eefc287888862afb

トラックバック - http://subtech.g.hatena.ne.jp/mala/20091229
 |