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

最近のエントリー

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

ランダム

  • 複写機を使って複写することをなんというか (2008/06/02)
  • WebデザイナーはOperaを使え (2009/06/05)
  • Togetter向けuser.jsバージョンアップ (2010/09/15)
  • Togetterにページング機能を追加するuser.js (2010/04/14)
  • 私たちは繁殖している 9巻 (2009/07/01)

月別アーカイブ

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

ページ送り

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