« [お詫び] IE6 と IE7 共存の方法についての補足 | メイン | お金をもらってブログに記事を書くのは反倫理的行為か »
2006年12月04日
レビューポスターを1ページに複数はりつけられるようになりました
IT戦記 - [JavaScript] とてもシンプルに自分自身が属する script 要素を取得 を早速活用させていただきました。(素晴らしすぎ。ありがとうございます!)
そしてようやくレビューポスターを一ページに複数貼り付けられるようになりました。
こんな感じです(RSSリーダーで見ている方はこちらへ)。
管理人ブログ人気記事 |
---|
![]() |
generated by レビュー・ポスター |
レビューポスターのレビュー |
---|
![]() |
generated by レビュー・ポスター |
フレッシュリーダーのレビュー |
---|
![]() |
generated by レビュー・ポスター |
参考までに変更点をまとめておきます。
#javascript 苦手なのでコードは見れたもんじゃありませんが…
reviewposter.js が読み込まれたら、直前の id = reviewposter_itemlist を取得し、関連情報をそのオブジェクトに保存しただけ。この技ブログパーツでかなり役立ちそうです。
// Thanks to IT戦記
var reviewposter_currentscript = (function (e) { if(e.nodeName.toLowerCase() == 'script') return e; return arguments.callee(e.lastChild) })(document);
// 周辺から id = reviewposter_itemlist を検索
var reviewposter_itemlist = reviewposter_getelementbyid(reviewposter_currentscript, "reviewposter_itemlist");
// 単純にscript要素の直前のブロック要素から深さ優先探索
function reviewposter_getelementbyid(e, id)
{
if (e && e.previousSibling){
var node = e.previousSibling;
while(!node.innerHTML && node.previousSibling){
node = node.previousSibling; // safari, opera
}
// こいつは childNodes を探索しているだけ
var d = reviewposter_getelementbyid_recursive(node, id, 8);
if (d) return d;
}
return document.getElementById(id);
※もちろん、これまで貼り付けたコードも1ページに1個であればそのまま動作します。
そして貼り付ける方のコード変更がちと突貫。というか javascript 系はかなり微妙なのだけども・・・。貼り付け系はブログサービス屋さんによっては文字数制限もあるし・・・ごにょごにょ。
旧貼り付けコードからの変更点:onclick="javascript:reviewposter_showitems();return false;"
↓
onclick="javascript:reviewposter_showitems(this);return false;"
(同じようなのがもう一箇所)
検証環境は Windows - IE6, IE7, Firefox 2, Opera 8+, Mac - Safari 2, NN7, IE, Opera 8+ です。
ちと話がそれますが、mac IE6 をサポートするために、setTimout() の第一引数に関数を設定できず、ちょっと苦労します。というかなんか気持ち悪い。
×setTimeout(function(){return some_function(param);}, 200);
○setTimeout("some_function()", 200);
Ajax も使えないしそろそろ mac ie 捨てたいと思いつつ、まだまだ利用されているので悩ましい…。
投稿者 aka : 2006年12月04日 20:30 / 2006年12月 / (~2006) レビュー・ポスター
トラックバック
このエントリーのトラックバックURL:
http://133.242.136.64/mt-tb-sf.cgi/522