Hatena::ブログ(Diary)

てんぷらメモ@はてな

2009-12-13

[][] Chrome Extension で、livedoor Reader のキーバインドをカスタマイズする

livedoor Readerにソーシャルブックマーク登録数を表示するChrome Extensionを作ってみた - 今日覚えたことを参考にして、livedoor ReaderのショートカットキーをカスタマイズするGreasemonkeyスクリプトのような、Keybind の追加を、Chrome Extensionにします*1

  • ダウンロード
    • 4.0.266.0 でテスト
    • インストールは、「設定、拡張機能」や、chrome://extensions/ などから、「デベロッパー モード: パッケージ化されていない拡張機能を読み込みます...」で、展開したzipのsrc以下を選択して読み込む
    • または、rake package:crx として、crxファイルを生成し、Chrome にドロップ
  • manifest.json
    • "run_at": "document_start"でないとうまくいかない場合がある?
{
  "name": "LDR Keybind Extension",
  "version": "1.0",
  "description": "livedoor Reader Keybind extension.",
  "content_scripts": [
    {
      "js": ["main.js"],
      "run_at": "document_start",
      "matches": [
        "http://reader.livedoor.com/reader/*",
        "http://fastladder.com/reader/*"
      ]
    }
  ]
}
(function(){
  window.addEventListener('load', function(){
    var urls = [
      chrome.extension.getURL('ldrwithtouchall.user.js'),
      chrome.extension.getURL('ldrkeyhackkeytouchall.user.js')
    ];
    for(var i = 0; i < urls.length; i++){
      var script = document.createElement('script');
      script.type = 'text/javascript';
      script.charset = 'utf-8';
      script.src = urls[i];
      document.body.appendChild(script);
    }
  }, false);
})();
(function() {
    Keybind.add('d', function() {
        var feed = get_active_feed(true);
        if(feed) {
            touch_all(feed.subscribe_id);
        }
    });
    Keybind.add('t', function() {
        var queue = new Queue();
        get_active_feed().items.forEach(function(item) {
            queue.push(function() {
                window.open(item.link);
            });
        });
        queue.interval = 200;
        queue.exec();
    });
    Keybind.add('q', function() {
        var logout = '/reader/logout';
        window.open(logout, '_self');
    });
}) ();
(function(){
    var description = "\u5168\u90e8\u65e2\u8aad\u306b\u3057\u307e\u3059";
    var label       = "\u5168\u90e8\u65e2\u8aad\u306b\u3059\u308b";
    entry_widgets.add('test_touch_all', function(feed) {
        return [
            "<span class='button' onclick='touch_all(\"",
            feed.subscribe_id,
            "\")'>",
            label,
            "</span>"
        ].join("");
    }, description);
})();

*1:Operaなどで使用していた、User Script をそのまま使用すると、たまに?読み込めないことがあるみたいなので