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

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

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

短縮URLを展開するGreasemonkeyスクリプト

追記2:CodeReposのほうは修正しました。CodeReposのほうからダウンロードしてください。
追記:下のコードは脆弱なので、もし使用されている方がいたら一旦使用を中止してください。すいません。


/lang/javascript/userscripts/unziplinker.user.js –
CodeRepos::Share – Trac
にコミットしました。最新版はCodeReposから取得してください。

初期設定ではTwitterのみで動きますが、コード自体は汎用的に動くように作ってあるので@includeにURLを追加すればいろんなサイトで動きます。

このスクリプトは、Expand TinyURL for Greasemonkeyを参考に作りました。
特長:

  1. TinyURL以外も展開できる(展開したい短縮URL正規表現を追加するだけ)
  2. AutoPagerizeだけでなく、サイトがAjaxに追加したリンクでも動作する

スクリプト:

// ==UserScript==
// @name           unzipLinker
// @namespace      http://d.hatena.ne.jp/javascripter/
// @include        http://twitter.com/*
// ==/UserScript==
(function() {
  const REPLACE_CONTENT = true;
  const URL_LIST = [
  /^http:\/\/tinyurl\.com\//,
  /^http:\/\/(?:.*?\.)?zz\.tc\/.+/
  ];

  var requested = {};
  document.addEventListener('mouseover',
  function(e) {
    var elem = e.target.wrappedJSObject;
    if (requested[elem] == undefined && elem.hasAttribute('href')) {
      if (!URL_LIST.some(function(re) re.test(elem.href))) return;
      requested[elem] = true;
      GM_xmlhttpRequest({
        method: 'get',
        url: elem.href,
        onload: function({
          finalUrl: url
        }) {
          elem.href = url;
          if (REPLACE_CONTENT) {
            elem.textContent = url;
          } else {
            elem.title = url;
          }
        },
        onerror: function() {
          delete requested[elem];
        }
      });
    }
  },
  false);
})();