Hatena Rolling を update した
機能もコードも非常にショボくてだめだめな感じの拙作 greasemonkey スクリプトの Hatena Rolling ですが、自分的には非常に便利で、愛用していたりします。先日、サーバが死んだことにともない、そのスクリプトも消え失せてしまってたかと思いきや、Userscripts.org: Hatena Rolling に残っているのを発見し、ちと安堵したりもしました。
さて、その間にもみんな大好きはてなさんは次々と新しいサービスをリリースしまくりで、Hatena Rolling を新サービスに対応しる! との声も聞かれたり聞かれなかったりしたので、10 文字ぐらい追加すればオケなはずってんでやってみると、あれ、うまくいかないなぁ……という事態に。
そのうまくいかなかったところってのは、はてなマップのユーザごとのページでのリンクボックス表示(僕とこだとはてなマップ - antipopの地図)。元々は for (var i in obj) { ... }
としてまわしていたのですが、はてなマップが prototype.js を利用している関係で、prototype.js が Object を拡張しちゃってて、単にそゆふうにまわすだけではうまくいかないわけです。困りました。
そこで、ニート言語の使い手に泣きついたら、さくっと解決してくれました。さすが過ぎ。要は、「最速インターフェース研究会 :: prototype.jsのObject汚染を回避する方法」で述べられている通り、あるオブジェクトが持つプロパティが、元々そのオブジェクトが持っていたものなのか、あるいは prototype.js がやるように、あとから拡張されたものなのかを、hasOwnProperty メソッドで判別してやればいい、と。たとえば、以下のような感じ。
for (var i in obj) {
// もともと持っているプロパティかどうか調べ、
// 後付されたものならスキップ
if(!obj.hasOwnProperty(i)) continue;
// 以下、通常の処理
...
}
とまぁ、そんなこんなで、Hatena Rolling を update しましたよ、というお話でした。