- 2008-09-13 (土) 21:41
- JavaScript
これはなに?
Google Reader でスターを付けた記事をまとめて開くことができる Greasemonkey です。
スター付きアイテムなどを開いた状態で、「o」キーを押すとスター付きの記事を最大 5 件開きます。
開いた記事のスターは消えます。
最近 Google Reader を使うようになったんですが、スターを付けた記事をまとめて開くのがめんどくさかったので作りました。
既に下記リンク先に Greasemonkey はあるのですが、getElementsByTagName などが使われていて Safari では使えなかったので動くようにしました。もちろん Firefox でも動きます。
Google Reader のスターを Livedoor Reader のピンみたいにまとめて開く Greasemonkey - もうゴールしていいブログ
インストール
こちらからインストールしてください。
Google Reader Star Opener – Userscripts.org
ソース
// ==UserScript==
// @name Google Reader Star Opener
// @namespace http://www.sukechan.net/
// @description Starred item open in a lump for Google Reader.
// @include http://www.google.co.jp/reader/view/*
// @include http://www.google.com/reader/view/*
// @version 1.0.1
// ==/UserScript==
(function() {
var MAX_WINDOW_OPEN = 5;
var onKeyDown = function(event) {
if(event.keyCode == 79 && !event.shiftKey) {
var entries = document.evaluate('//div[@id="entries"]//div[@class="entry-container"] | //div[@id="entries"]//div[@class="collapsed"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for(var i = 0, m = MAX_WINDOW_OPEN; i < entries.snapshotLength && m > 0; i++) {
var entry = entries.snapshotItem(i);
var stars = document.evaluate('.//div[contains(@class, "item-star-active")]', entry, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
if(stars.snapshotLength > 0) {
var star = stars.snapshotItem(0);
var links = document.evaluate('.//h2[@class="entry-title"]/a | .//div[@class="entry-main"]/a', entry, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
if(links.snapshotLength > 0) {
var link = links.snapshotItem(0);
var win = window.open(link.href);
if(win && !win.closed) {
m--;
var event = document.createEvent('MouseEvents');
event.initEvent('click', true, true);
star.dispatchEvent(event);
}
}
}
}
}
}
document.addEventListener('keydown', onKeyDown, false);
})();
(追記@2008-09-14)
ポップアップブロック等でウィンドウが開かなかった場合にスターを解除しないようにしました。
ポイント
- Google Reader 側の HTML が変更される可能性があるので、メンテしやすくしておく。今回は全て XPath を使用。
- document.evaluate の第 2 引数に document 以外のノードを指定した場合は、// を使うとルートノードから走査されることに注意。第 2 引数は単純に初期位置の指定です。ずっとそのノード以下だけが検索されると思ってました。
参考リンク
- Newer: WordPress 2.6.2 にバージョンアップ
- Older: iPhone 向けのタスク管理アプリを作ってみる
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://www.sukechan.net/archives/84/trackback/
- Listed below are links to weblogs that reference
- Google Reader のスターをまとめて開く Greasemonkey from sukechan.net