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

Main navigation

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

パンくず

  1. ホーム
  2. 月別アーカイブ

1月 2011

  • 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
  • あけましておめでとうございます

    By mattz, 2011/01/01

    今年の年賀状
    サイズでかいです。
    実際は住所とかも入ってました。

    タグ

    • 雑記

月別アーカイブ

  • 6月 2025 (48)
  • 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