« 【ココログ】メンテ中のトラックバック/コメント欄がメンテ用表示に切り替わらない | トップページ | 【はてなスター】同じURLで複数箇所に★を付けると誤動作する件 »

2007/07/26

【ココログ】はてなスターがアーカイブページで動作しない件

この記事で報告した不具合については、2007/07/27に改修されました。
Internet Explorerで☆が表示されない場合がある問題を修正しました
参考として記事は消さずに置いておきます。

はてなスターをココログで使おうとすると、アーカイブページでうまく機能しない場合が有る件への暫定対処方法についてです。
はてなスターで出力されるコードをココログのサイドバーのメモ欄等に貼り付けておけば、とりあえずはココログでもはてなスターが動作します。
ところが、どうもアーカイブページ(トップページ・カテゴリー・バックナンバー等)にいくと、星マークは表示されても、うまく機能しない場合があるようです。
そこで調べてみると、このスクリプト、HEAD要素中に次のようなSCRIPT要素を埋めこむのですね。
<script src="http://s.hatena.ne.jp/entries.json?uri=http%3A%2F%2Ffuryu.tea-nifty.com%2Fannex%2F2006%2F07%2Fjavascript_b0ea.html&uri= (中略) &&callback=Ten.JSONP.callback&Thu%20Jul%2026%2022:52:56%20UTC+0900%202007" type=text/javascript></script>
uri=...&uri=...のように、そのページ内の全記事のURIを引数として並べる模様。
なので、ココログのアーカイブページのように、沢山の記事が有ると、src="~"の文字制限(ブラウザに依存します)に引っかかってしまうのです。
実際、IE6でスクリプトのデバッグをONにしていると、
Internet Explorer スクリプト エラー
このページのスクリプトでエラーが発生しました。
ライン: 59
文字: 9
エラー: ポインタが無効です
コード: 0
URL: https://furyu.tea-nifty.com/annex/2006/03/index.html
のようなエラーが発生してしまいます。
回避のためには、はてなスターのコードの後ろに、
<script type="text/javascript">
Hatena.Star.EntryLoader.loadEntries = function() {
    var entries = [];
    var c = Hatena.Star.EntryLoader;
    var headers = c.getHeaders();
    var maxentry = 10;
    var numentry = 0;
    for (var i = 0; i < headers.length; i++) {
        var header = headers[i];
        var a = header.getElementsByTagName('a')[0];
        var uri ;
        var title = '';
        if (a) {
            uri= a.href;
            title = a.innerHTML.replace(/<\/?[^>]+>/gi,'');
        }
        else {
            title = header.innerHTML.replace(/<\/?[^>]+>/gi,'');
            header.innerHTML = '<a href="' + location.href + '">' + header.innerHTML + '</a>' ;
            uri= location.href;
        }
//        title = c.scrapeTitle(title);
        var cns = header.childNodes;
        var cc = c.createCommentContainer();
        header.appendChild(cc);
        var sc = c.createStarContainer();
        header.appendChild(sc);
        numentry ++;
        if ( maxentry && maxentry<numentry ) break ;
        entries.push({
            uri: uri,
            title: title,
            star_container: sc,
            comment_container: cc
        });
    }
    return entries;
}
</script>
のようなコードを追加で貼り付けます。
すると、星が付くのが最初の10件(赤字部分変更で調整可能)になるので、エラーを回避できると思います(もっとも、特に月別バックナンバーで最初の10件にしか星が付けられないというのは変ですけどね。やっぱり根本対策がいるなぁ→はてなアイデアにコメント登録)。
ついでに個別ページでも星が付くようにしてみたつもりですが、どうでしょうね?

【2007.07.27】
早速対策されましたね。
なお、上記コードについては、赤字部分を0に変更すれば、対策後もそのまま使用できます。
この記事を書いた後でよく探してみたら、はてなスター日記に、
1ページにたくさんのエントリーを含むページで☆が表示されない問題を修正されました
という記事がありました。
1ページ内に大量のエントリーを含むページで☆が表示されない場合がある問題がありましたが、この問題をさきほど修正しました。
ということなんですが……今日は7/27ですけれど、エラーが出ますよ?
調べてみると確かに、getStarEntriesの中で、urlが"Ten.JSONP.MaxBytes"を越えた長さになると分割呼出を行っているようなコードがあります。
一方、Ten.JSONP.MaxBytesの値は8000です……って、IE6とかだと、これではまだ長すぎるのじゃ?
と思って、Hatena.Star.EntryLoader.loadEntriesの定義に、
if (navigator.userAgent.match(/msie/i) && 3000<Ten.JSONP.MaxBytes) Ten.JSONP.MaxBytes=3000;
のようなのを入れて確かめてみたのですが、確かにエラーは出なくなるのですが、やっぱり★は付きません(Add Starのアイコンは付くのですが、クリックしても反応しません)。
まだ何かあるのでしょうかねぇ?

« 【ココログ】メンテ中のトラックバック/コメント欄がメンテ用表示に切り替わらない | トップページ | 【はてなスター】同じURLで複数箇所に★を付けると誤動作する件 »

ウェブログ・ココログ関連」カテゴリの記事

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: 【ココログ】はてなスターがアーカイブページで動作しない件:

« 【ココログ】メンテ中のトラックバック/コメント欄がメンテ用表示に切り替わらない | トップページ | 【はてなスター】同じURLで複数箇所に★を付けると誤動作する件 »

戻るリンク追加

カレンダー

2025年1月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

ココログカレンダーPlus(旧2)

検索


    • Web全体 サイト内
    • 蔵書のISBNを入力して下さい
    • はじめる前
      初級者向け
      上級者向け
      ブログ紹介
      結果を表示

コメントリストツリー化

無料ブログはココログ