livedoorReaderを片手だけで読むChromeExtention

2010/05/16追記 公式の拡張機能サイトに登録しました。右のリンクからインストールできます。Only j for livedoor Reader

TwitterにRTボタンを追加するUserScript for Chrome/GreaseMonkey(正式版)を参考にさせてもらって(ほとんど流用)、livedoorReaderのフィード消化をちょっと快適にするChromeExtentionを作ってみました。

livedoorReaderのキーバインドは、j で次のエントリ。s で次のフィードへ移動するようになってます。これは、未読フィードの消化に両手を使う必要があるということです。片手で読めたら、もっと気楽に読めます。そこで、フィードの最後のエントリで、 j を押したら、 s を押したのを同じになるようなChromeExtentionを作ってみました。時々変な動きをすることがあるような気がしますが、あんまりlivedoorReaderのヘビーユーザではないので、テストは不十分ですが、片手で読み進めることができるようにするという目標は達成しています。

インストール

GoogleChrome(4以上)の場合は、下記をクリックするだけでExtentionとしてインストールされます。

(2010/03/27 修正しました。詳細は下の追記参照)

※とりあえず置いておきます。置き場所は変更する可能性があります。

ソース

ソースは以下です。

// ==UserScript==
// @name           only j reading for Livedoor Reader (Google Chrome Extention)
// @description    if not exists next entry, go to next feed.
// @author         @smeghead
// @match          http://reader.livedoor.com/
// @match          http://reader.livedoor.com/*
// @match          https://reader.livedoor.com/
// @match          https://reader.livedoor.com/*
// ==/UserScript==
//割り込み処理
var globalScript = "(" + (function(){
var eventFunction = function(key, test, alternateKey) {
var originalFunction = Keybind._keyfunc[key];
Keybind._keyfunc[key] = function() {
var nextItemOffset = Control[test]();
originalFunction();
if (nextItemOffset == null) {
Keybind.sendKey(alternateKey);
}
};
};
eventFunction('j', 'next_item_offset', 's');
eventFunction('k', 'prev_item_offset', 'a');
}).toString() + ")();";
//スクリプトのサイトスペースへのエクスポート
function exportToSite() {
var scriptContent = '';
for (var i = 0; i < arguments.length; i++) {
scriptContent += arguments[i].toString() + '\n';
}
addScriptNode(scriptContent);
}
//スクリプトノードの生成
function addScriptNode(content){
var headNode = document.querySelector('head');
var scriptNode = document.createElement('script');
scriptNode.setAttribute('type','text/javascript');
//ちゃんとテキストノード作って追加しないとWindows版のChromeで動かない
var textNode = document.createTextNode();
textNode.nodeValue = '//<![CDATA[\n' + content + '\n//]]>';
scriptNode.appendChild(textNode);
headNode.appendChild(scriptNode);
}
//スクリプトノード追加
exportToSite(globalScript);

今見るとグローバル環境汚す必要も無かった。後日修正するかもしれません。

例によって、つっこみ歓迎です。

追記 2010/03/27

  • グローバル環境を汚さない修正しました。
  • 前は敢えて一番下のエントリでjを押して「最後だよ」が表示されてから、再度 j を押したときに次のフィードに移るようにしてたけど、「最後だよ」が表示されるタイミングで次のフィードに移るようにした。
  • 一番上のエントリでkを押した時、前のフィードに移動するようにした。

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.