Google Reader で 5 件ずつ一気に新しいタブで表示する Greasemonkey を書いてみた その5
その4:http://d.hatena.ne.jp/spider-man/20080119
見た目こんなの↓
なんだかダメダメな動作だった・・・「すべて表示」なのに5件しか表示しないとか・・・orz 動作確認ちゃんとせーよ -> 自分。
ついでに内部ロジックの見直しと、表示したはずなのに残ってしまうタイトルがあるのを修正。んでソースも見直し。クロージャをようやく理解できた(気がする)。
// ==UserScript== // @name google reader all open button // @namespace googlereader@basyura.com // @include http://www.google.co.jp/reader/view/* // ==/UserScript== // version 0.8 2008.01.22 <ちょっとキレイにした> // version 0.7 2008.01.21 <全て表示で5件表示になっていたのを修正> // <remove漏れ対応でロジック変更> // version 0.6 2008.01.19 <件数指定で表示できていなかったのを修正> // version 0.5 2008.01.19 <全て既読にするが無効になっていたのを修正> // version 0.1 2008.01.14 <ボタン変更> // var BUTTON_LIST = {5:"5件表示" , 50:"全て表示"}; function openPages(max) { var entries = document.getElementById("entries"); var entry = entries.childNodes; var list = []; for(var i = 0 ; i < entry.length ; i ++) { if(list.length >= max) { break; } var className = entry[i].className.split(" ")[0]; if(className == "entry") { var a = entry[i].getElementsByTagName("a")[0]; var event = document.createEvent('MouseEvents'); event.initMouseEvent ('click', false, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null); a.dispatchEvent(event); GM_openInTab(a.href); list.push(entry[i]); } } for(var i = 0 ; i < list.length ; i++) { entries.removeChild(list[i]); } } function addButton() { var toplinks = document.getElementById("viewer-top-links"); var allread = document.getElementById("mark-all-as-read"); for(var m in BUTTON_LIST) { var nopen = allread.cloneNode(true); nopen.id = "nopen_" + m; toplinks.insertBefore(nopen , allread); var span = nopen.getElementsByTagName("span")[0]; span.innerHTML = BUTTON_LIST[m]; span.addEventListener("click" , (function(m_){return function(){openPages(m_)}})(m) , false); } } addButton();
ここ(http://www3.pf-x.net/~spider-man/)にも置いているので良かったらどうぞ。
今回は Firebug を使って script のエラーを確認したり HTML 要素を確認したりしながら作ったんだけど amachang が手放せないと言っている理由が良く分かった。便利すぐる。