メインコンテンツに移動
mattz.xii.jp

Main navigation

  • Home
  • YBR125メモ
User account menu
  • ログイン

パンくず

  1. ホーム

rel='next'なlink要素を強制的に付加するuser.js

By mattz, 2011/01/07

Operaにはfastforwardという素敵な機能があって、真っ当なつくりのページであればこれで事足りるのですが、世の中真っ当なつくりのページというのはなかなかございませんもので、このようなものを作りました。

もちろん、extreme-fast-forward.jsなんていうものが既にあるこ とは百も承知なのですが、oAutoPagerizeが好みではないもので、SITEINFOとか導入してませんし。

やってることは、rel='next'なlink要素がない場合は、ページ内のリンクから次っぽいリンクを見つけて(※)、そのリンク先URLをnextページとしてrel='next'なlink要素を付加するというものです。

※ちなみにa要素のinnerTextに「次」とか「つぎ」とか「Next」があればそのリンクは次のページへのリンクであろう、とか、a要素のinnerTextがなくて、a要素の中身が画像であってそのalt属性に「次」とか「つぎ」とか「Next」とかあるならそのリンクは次のページへのリンクであろう、みたいなやり方です。

副作用として次原隆二みたいなリンクに反応しちゃうことがありますが、まぁ大体うまくいっています。よろしければご利用下さい。

// ==UserScript==
// ==/UserScript==
(function (){
  var makeNextrel = function(url) {
    var n = document.createElement('link');
    n.rel = 'Next';
    n.href = url;
    document.querySelector('head').appendChild(n);
    return false;
  }
  var regexpnext = new RegExp(/(次|つぎ)( ?|[のへ])|next|[Nn][Ee][Xx][Tt])/i);
  window.addEventListener(
    'DOMContentLoaded',
    function(){
      var needsNext = true;
      var links = document.querySelectorAll('link');
      var i;
      for(i = 0; i  links.length; i++) {
        if(links[i].rel.match(/next/i)) {
          needsNext = false;
          return false;
        }
      }
      var ancs = document.querySelectorAll('a');
      var len = ancs.length;
      var linkto = '';
      for(i = 0; i  len; i++) {
        if(ancs[i].href) {
          linkto = ancs[i].href;
          if(ancs[i].innerText.match(regexpnext)){
            needsNext = makeNextrel(linkto);
          } else if('IMG' == ancs[i].firstChild.tagName){
            var f = ancs[i].firstChild;
            if(f.getAttribute('alt') && f.getAttribute('alt').match(regexpnext)) {
              needsNext = makeNextrel(ancs[i].href);
            } else if(f.getAttribute('title') && f.getAttribute('title').match(regexpnext)) {
              needsNext = makeNextrel(ancs[i].href);
            }
          }
        }
        if(!needsNext) {
          break;
        }
      }
    },false
  );
})();
var regexpnext = new RegExp(/(次|つぎ)( ?|[のへ])|next|[Nn][Ee][Xx][Tt])/i);

のところをお好みの正規表現に変えてあげれば、これでうまく行かないページでもどうにかなるはずですが、正規表現なんか知らんという方はご相談下さい。

タグ

  • Opera
  • UserJS
  • JavaScript
前のエントリー次のエントリー

最近のエントリー

  • 2025シーズン セ・パ12球団の総移動距離
  • 2023年度 パシフィック・リーグ主催試合ヒーローインタビューランキング
  • 2024シーズン セ・パ12球団の総移動距離
  • 当サイトのDrupalが10になりました
  • E-Vinoを買ってみました
  • 2023シーズン セ・パ12球団の総移動距離
  • 俺は野球殿堂博物館を甘く見ていた
  • 2022シーズン セ・パ12球団の総移動距離
  • Drupalを9にあげてみました
  • 2021シーズン セ・パ12球団の総移動距離

月別アーカイブ

  • 6月 2025 (50)
  • 12月 2024 (1)
  • 11月 2023 (3)
  • 10月 2023 (1)
  • 12月 2022 (1)
  • 4月 2022 (1)
  • 12月 2021 (1)
  • 2月 2021 (1)
  • 11月 2020 (1)
  • 7月 2020 (1)
  • 12月 2019 (1)
  • 7月 2019 (2)
  • 5月 2019 (3)
  • 3月 2019 (1)
  • 2月 2019 (1)
  • 12月 2018 (1)
  • 12月 2017 (1)
  • 1月 2017 (1)
  • 5月 2016 (1)
  • 2月 2016 (1)
  • 2月 2015 (2)
  • 11月 2014 (1)
  • 7月 2014 (1)
  • 6月 2014 (1)
  • 5月 2014 (1)
  • 2月 2014 (1)
  • 12月 2013 (1)
  • 11月 2013 (1)
  • 10月 2013 (1)
  • 6月 2013 (1)
  • 5月 2013 (1)
  • 3月 2013 (2)
  • 2月 2013 (1)
  • 1月 2013 (2)
  • 12月 2012 (1)
  • 11月 2012 (1)
  • 10月 2012 (4)
  • 9月 2012 (1)
  • 8月 2012 (2)
  • 6月 2012 (2)
  • 5月 2012 (1)
  • 3月 2012 (5)
  • 2月 2012 (1)
  • 1月 2012 (3)
  • 12月 2011 (1)
  • 10月 2011 (1)
  • 7月 2011 (4)
  • 6月 2011 (3)
  • 5月 2011 (2)
  • 4月 2011 (7)
  • 3月 2011 (4)
  • 2月 2011 (1)
  • 1月 2011 (2)
  • 12月 2010 (2)
  • 11月 2010 (2)
  • 10月 2010 (5)
  • 9月 2010 (5)
  • 8月 2010 (1)
  • 7月 2010 (6)
  • 6月 2010 (6)
  • 5月 2010 (4)
  • 4月 2010 (6)
  • 3月 2010 (14)
  • 2月 2010 (10)
  • 1月 2010 (6)
  • 12月 2009 (11)
  • 11月 2009 (10)
  • 10月 2009 (13)
  • 9月 2009 (23)
  • 8月 2009 (12)
  • 7月 2009 (23)
  • 6月 2009 (22)
  • 5月 2009 (40)
  • 4月 2009 (6)
  • 3月 2009 (6)
  • 2月 2009 (6)
  • 1月 2009 (12)
  • 12月 2008 (15)
  • 11月 2008 (13)
  • 10月 2008 (10)
  • 9月 2008 (12)
  • 8月 2008 (19)
  • 7月 2008 (15)
  • 6月 2008 (45)
  • 5月 2008 (29)
RSS feed