HatenaBookmark: IDコール先のコメントに飛ぶ

  • /*
     * @title HatenaBookmark: IDコール先のコメントに飛ぶ
     * @description IDコールのリンクをコメントへのページ内リンクに書き換える
     * @include http://b.hatena.ne.jp/entry/*
     * @license CC0
     */
    
    document.addEventListener('click', function(event){
        var target = event.target;
        if(target.parentNode.classList.contains('comment') && target.getAttribute('href')[0] == '/'){
            var id = target.href.split("/")[3];
    
            // 同じブックマークコメントが「人気コメント」「新着コメント」「すべてのブックマーク」の各タブに重複して存在する可能性がある。
            // 以下では、言及されたユーザーのブックマークコメントのうちでページ上に表示されているものを選択する。
            // 「すべてのブックマーク」を開いていない場合には、言及されたユーザーのブックマークコメントが存在していても表示されていないために選択に失敗する可能性がある。
            var visibleBookmark;
            var bookmarks = document.querySelectorAll("#bookmark-user-" + id);
            for(var j = 0; j < bookmarks.length; j++){
                if(bookmarks[j].getBoundingClientRect().height){
                    visibleBookmark = bookmarks[j];
                    break;
                }
            }
            var tmpId = Math.random();
            var originalId = visibleBookmark.getAttribute("id");
            visibleBookmark.setAttribute("id", tmpId);
            location.href = "#" + tmpId;
            visibleBookmark.setAttribute("id", originalId);
            event.preventDefault();
        }
    });
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2014/03/10 18:09:14 - 2014-03-10
  2. 2014/03/07 18:24:12 - 2014-03-07
  3. 2014/03/06 20:30:02 - 2014-03-06