改版しました [2006-10-08-2]
他人様のコードをいじっているうちに [2006-07-05-2] [2006-07-05-3] 何となく勘がつかめてきたような気がするので,調子に乗って懸案事項に手をつけてみる.
以前,bloglines で表示中の記事のタイトル名,URL をまとめてクリップボードにコピーする bookmarklet (Firefox 専用) を書いた [2006-02-11-1] [2006-04-22-1].これ使うときは,
という流れが多くて,何とかならんかなと思ってたのだ.
というわけでこんな感じ.
onload を使っているので MSIE では動作しないはず.直すのは簡単だと思うけど,とりあえず放置.
ソース:
javascript:(function(){ function phandler (paths) { if (paths.length < 1) { return; } else if (paths.length == 1) { top.treeframe.location = paths[0]; return; } var p = paths.shift(); var xhr = new XMLHttpRequest(); xhr.onload = function () { phandler(paths); }; xhr.open('GET', p, true); xhr.send(null); } var paths = new Array; var ipts = top.basefrm.document.getElementsByTagName("input"); for (var i = 0, k = 0; i < ipts.length; i++) { if (ipts[i].type == "checkbox" && String(ipts[i].onclick).match(/markUnreadItem\(\s*(\d+)\s*,\s*(\d+)\s*\)/) && ipts[i].checked == true) { var subid = RegExp.$1; var itemid = RegExp.$2; ipts[i].checked = false; paths[k++] = '/myblogs_subs?ui=1&subid='+subid+'&itemid='+itemid; } } phandler(paths); })();
期せずして Ajax デビューしてしまった.(XML 使ってないから Aj デビューか?)
やってることは単純で,keep new のチェックボックスについている onclick 属性から,その記事の subid と itemid を取り出して,それらからパス名 '/myblogs_subs?ui=1&subid='+subid+'&itemid='+itemid を生成して,GET しに行っている.
bloglines で実際に keep new のボタンを押した場合は, parent.treeframe.location にこのパス名を直接代入するコードが実行されるのだけど,複数の記事についてこれを単純に繰り返すと,前のやつの読み込みが終わる前に次のやつを読みに行ってしまってうまく行かない.というわけで XMLHttpRequest を使ってみた.
(open の第3引数を false にすればもっと簡単に書けるかと思ったけど,そうすると解除がすべて終わるまで操作を受け付けなくなってしまって,使いにくかった)
ついでなので,まとめてクリップボードにコピーする方もちょっとだけ書き直しておく.以前のは正規表現で無理矢理抽出してたけど,真面目に DOM ツリーをたどるようにした.
ソース:
javascript:(function(){ function setClipboard(text){ /* 省略 (http://la.ma.la/misc/js/setclipboard.txt) */ } function fmt(title, href) { return '\r\n\t* ' + title + ':\r\n\t- ' + href + '\r\n'; } var clog = ''; var h3s = top.basefrm.document.getElementsByTagName("h3"); for (var i = 0; i < h3s.length; i++) { var a = h3s[i].getElementsByTagName("a")[0]; clog = clog + fmt(a.firstChild.nodeValue, a.href); } setClipboard(clog); })();
ChangeLogメモ以外の形式に変換したい場合は,fmt() の中身を適当にいじってください.
最終更新時間: 2009-01-04 15:31
* [Sandroo] An inetlglinet point of view, well expre... (2013-01-01 20:46:17)