読者です 読者をやめる 読者になる 読者になる

素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

Greasemonkeyスクリプトの末尾に?.user.jsを付けるスクリプトを汎用的に使えるようにした(SITEINFO)


os0x's
gist: 2000 — Gist
に、gist.github.comにピンポイントで使えるものがあったのだけど、もう少しいろんなサイトで使いたかったから僕も書いた。
アドレスが.user.jsで終わるものに?をつけるGreasemonkeyスクリプト - 素人がプログラミングを勉強するブログの応用。

SITEINFOの書き方とか:

  1. urlには、使いたいサイトの正規表現もしくは文字列を書く。文字列の場合は先頭一致。
  2. linkには、書きかえたいリンクのCSSセレクタを書く。
  3. textには、textContentを取得したいCSSセレクタを書く。省略するとlinkのtextContentが使われる。
  4. patternには、textにテストさせたい正規表現を書く。省略すると/\.user\.js$/が使われる。
// ==UserScript==
// @name           GMInstallHelper
// @namespace      http://d.hatena.ne.jp/javascripter/
// @include        http*
// ==/UserScript==
(function() {
  const SITEINFO = 
    {
      github: {
        url: "http://github.com",
        link: "#files .actions > a",
        text: "#path",
        pattern: /\.user\.js\s*$/
      },
      gist: {
        url: "http://gist.github.com/",
        link: "#files .actions > a:last-child",
        text: ".info > span"
      }
    };
  var info = null;
  for each(var i in SITEINFO)
    if (typeof i.url == "string") {
      if (location.href.indexOf(i.url) == 0) {
        info = i;
        break;
      }
    } else {
      if (i.url.test(location.href)) {
        info = i;
        break;
      }
    }
  if (!info) return;
  var link = document.querySelector(info.link);
  if (!link) return;
  var text;
  if (info.text) {
    var textElem = document.querySelector(info.text);
    if (!textElem) return;
    text = textElem.textContent || "";
  } else {
    text = link.textContent || "";
  }
  if ((info.pattern || /\.user\.js$/).test(text))
    link.href += "?.user.js";
})();