「はてなグリースモンキー」>「アンテナ手動更新リンク」のBUG?と修正案
まず始めに、私は Firefox なら使ってるけれども、グリースなんとか? って云う拡張は使った事が無いので、以下に書く日記は、”まったくの誤り!”の可能性が在る事を、ここにお断りしておきます。
ここでのお話は Opera Ver.8.50 日本語版 に 「はてなグリースモンキー」 のページで紹介されている 「アンテナ手動更新リンク」の HatenaAntennaManualUpdate.user.js を適用した場合の事です。
で、手短に結論を書くと
はてなアンテナでは、各々のアンテナについて「サイト更新チェック用のURL」と「表示用URL」の2つを指定できるが、 「アンテナ手動更新リンク」の HatenaAntennaManualUpdate.user.js で生成されるリンクは「表示用URL」で更新チェックしてしまう。
当然、「サイト更新チェック用のURL」で更新チェックするべきジャマイカ!!!
そんでもって、↓が、私の修正案。
// Copyright (C) 2005, hatena. // Released under the GPL license // http://www.gnu.org/copyleft/gpl.html // // ==UserScript== // @name Hatena Antenna ManualUpdate // @namespace http://www.hatena.ne.jp // @include http://a.hatena.ne.jp/* // ==/UserScript== (function() { function createUpdateLink(url) { var text = unescape("%u66F4%u65B0"); var aTag = document.createElement("a"); aTag.style.fontSize = "9pt"; aTag.style.fontWeight = "normal"; aTag.href = "http://a.hatena.ne.jp/check?robots=1&fixpage=1&url=" + escape(url); aTag.appendChild(document.createTextNode(text)); return aTag; } var pageName = location.pathname.split("/")[2]; if (! (pageName=="" || pageName=="simple" || pageName=="detail")) return; var liTags = document.getElementsByTagName("li"); for (var i=0; i<liTags.length; i++) { var li = liTags[i]; if (li.firstChild.nodeName.toLowerCase()=="script") continue; for (var n=1; n<li.childNodes.length ; n++) { if (li.childNodes[n].nodeName.toLowerCase()=="a") { var url = li.childNodes[n].href; if (url.match(/^http:\/\/a.hatena.ne.jp\/include\?/)) { var checkurl=url.replace(/^http:\/\/a.hatena.ne.jp\/include\?(.*)$/,"$1"); if (checkurl) { if (pageName=="" || pageName=="detail") { var pTag = li.getElementsByTagName("p")[0]; li.insertBefore(createUpdateLink(checkurl), pTag); } else { li.appendChild(createUpdateLink(checkurl)); } break; } } } } } })();
こんなダサい修正案でお恥ずかしいけれど、すくなくとも、はてなアンテナ - borbisのアンテナでは適正に動作してます。
ていうか、今回の修正に関しては↑のアンテナは、すべての検査項目が入っているものと思います。
ま、はてな歴の浅い私の話じゃアテになりませんけど。。。。。
追記(2005-10-01)
過去にも同じ様な日記を書いている人を見つけた。
HM weblog
ドシロウトの私には、如何にも専門家っぽく見えて「カコイイ!」っぽいので真似してみたくなった。
検索してみると diff っていうツールを使うらしい事が判ったので早速 Vector からダウンロードして出来上がったのが↓。
--- HatenaAntennaManualUpdate.user.js.orig Fri Aug 19 18:47:46 2005 +++ HatenaAntennaManualUpdate.user.js Fri Sep 30 14:57:34 2005 @@ -27,16 +27,20 @@ for (var i=0; i<liTags.length; i++) { var li = liTags[i]; if (li.firstChild.nodeName.toLowerCase()=="script") continue; - if (! li.childNodes[1]) continue; - if (li.childNodes[1].nodeName.toLowerCase()=="a") { - var url = li.childNodes[1].href; - url.match(/^http:\/\/a.hatena.ne.jp\/go\?(.*)\d{14}$/); - if (RegExp.$1) { - if (pageName=="" || pageName=="detail") { - var pTag = li.getElementsByTagName("p")[0]; - li.insertBefore(createUpdateLink(RegExp.$1), pTag); - } else { - li.appendChild(createUpdateLink(RegExp.$1)); + for (var n=1; n<li.childNodes.length ; n++) { + if (li.childNodes[n].nodeName.toLowerCase()=="a") { + var url = li.childNodes[n].href; + if (url.match(/^http:\/\/a.hatena.ne.jp\/include\?/)) { + var checkurl=url.replace(/^http:\/\/a.hatena.ne.jp\/include\?(.*)$/,"$1"); + if (checkurl) { + if (pageName=="" || pageName=="detail") { + var pTag = li.getElementsByTagName("p")[0]; + li.insertBefore(createUpdateLink(checkurl), pTag); + } else { + li.appendChild(createUpdateLink(checkurl)); + } + break; + } } } }
なんだか、最後のあたりがチョッと違うけど気にしない事にする。