Hatena Bookmark Link Modifier

はてなブックマークの下部の記事の見出しリンク先が、記事ではなくブクマページになってしまっているのを修正します。

// ==UserScript==
// @name        Hatena Bookmark Link Modifier
// @namespace   knoa.jp
// @description はてなブックマークの下部の記事の見出しリンク先が、記事ではなくブクマページになってしまっているのを修正します。
// @include     https://b.hatena.ne.jp/entry/*
// @noframes
// @version     1.0.3
// @grant       none
// ==/UserScript==

(function(){
  const modify = function(){
    let links = document.querySelectorAll('[class$="title"] > a[href^="/entry/"]');
    Array.from(links).forEach(link => {
      // 2階建てに対応
      // https://b.hatena.ne.jp/entry/s/b.hatena.ne.jp/entry/s/www.famitsu.com/news/202008/14204041.html
      if(link.href.startsWith('https://b.hatena.ne.jp/entry/s/')){
        link.href = link.href.replace('https://b.hatena.ne.jp/entry/s/', 'https://');
      }else{
        link.href = link.href.replace('https://b.hatena.ne.jp/entry/', 'http://');
      }
    });
  };
  modify();
  observe(document.body, modify);
  if(document.hidden) window.addEventListener('focus', modify, {once: true});
  function observe(element, callback, options = {childList: true, characterData: false, subtree: false, attributes: false, attributeFilter: undefined}){
    let observer = new MutationObserver(callback.bind(element));
    observer.observe(element, options);
    return observer;
  }
})();