メインコンテンツに移動
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

最近のエントリー

  • パワーフィルターの交換
  • リヤタイヤ交換
  • ジェッティングメモ
  • シフトペダルの交換
  • フロントブレーキパッドの交換
  • バイクガレージを買った
  • バックミラーの交換
  • 角目化
  • バイクカバーを新調
  • クラッチレバーブーツの硬化対策

ランダム

  • たばこ1000円、4兆円の税増収=日本学術会議が試算 (2008/06/23)
  • worldwideじゃないよ (2012/10/25)
  • Firefox 3.5.1にUpdate (2009/07/22)
  • 世界卓球を観ているのですが (2009/05/01)
  • ブックマーク発掘調査 (2008/11/27)

月別アーカイブ

  • 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)

ページ送り

  • 前ページ
  • 3
  • 次ページ
RSS feed