読者です 読者をやめる 読者になる 読者になる

コメント表示数を変更する @はてなブログ

はてなブログでコメントの折り込まずに表示する量を増やす方法
はありますか?
回答宜しくお願いします!

http://q.hatena.ne.jp/1383740046

まずは、テストデータが必要なんだ。



とりあえず、できたっぽい。

コード

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
(function($){
    $(function() {
        /*
            コメントの最大表示数。
            ゼロにすると、全てのコメントが表示される。
        */
        var COMMENT_MAX_COUNT = 10;

        var s = Hatena.Diary.Pages.Blogs['*'].initEntry.toString();
        s = s.replace(
                /showEntryInfo\(entry, container, 3\);/,
                "showEntryInfo(entry, container, " + COMMENT_MAX_COUNT + ");");

        // 以下の三行を追加
        s = s.replace(
                /Hatena.Diary.Pages.Blogs\['\*'\].leaveCommentHandler\(entry, \$button\);/,
                ";");

        s = s.split(/\n/).slice(2, -2).join("\n");

        var initEntry = new Function("entry", s);

        self = Hatena.Diary.Pages.Blogs['*'];
        $('article.entry').each(function () {
            var $this = $(this);
            $("ul.comment > .entry-comment", $this).remove();
            initEntry.apply(self, [$this]);
        });

    });
})(jQuery);
</script>

コードについての不親切な説明

jQuery を取り込んでいるのは、こいつのせい。

  1. メソッド initEntry の内容を文字列で取得
  2. コメントを表示しているコードの最大数を置き換えちゃう
  3. Function.toString では、function (arg) { ... } の表記になっているので、関数のボディだけ取り出す
  4. 新しい関数のインスタンスを生成
  5. init メソッドの辺りから、initEntry を読んでる辺りのコードをパクる
    1. コメントは追加されるので、本来の初期処理で追加されたコメントを削除
    2. Hatena.Diary.Pages.Blogs['*'] に対して、新しい関数をメソッドとして呼び出す

雑感

無理矢理過ぎる X-|
すぐに動かなくなりそうな気もするけど、どれくらいの頻度でコードに手を入れているのかなあ...

後記

@2013-11-8
id:rouge_2008 さんから、以下の指摘を頂く。

P.S.
コメントフォームのダイアログが2つ開いてしまいます。
デフォルトのブログは1つだけだったので、今回のコードの影響かもしれません・・・

やっぱり。
回答を書く前に気が付こうね >a-kuma3

前にも増して、実装にべたべた依存のコードになってしまったのは、仕方あるまい。