Altキー+ドラッグによるアンカーテキストの選択を補助するGreasemonkeyスクリプト

Firefox 13 でAlt+クリックでリンク先のリソースを保存する機能が無効化された。この機能が必要ないのであれば、以下のスクリプトは必要ない。
以前のようにAlt+クリックでリンク先のリソースを保存したい場合はabout:configでbrowser.altClickSaveをtrueにすればよい。その上で以下のスクリプトをインストールすれば、「リンク先のリソースの保存」と「リンクテキストの選択」を両立できる。

Firefoxでは、Altキーを押しながらドラッグすることでアンカー(リンク)文字列を選択することができるものの、そのままだとリンク先のリソースを保存してしまう。

これはちょっとしたテクニックで避けることができる(参考:リンク上にある文字列をドラッグで選択する方法 | Web Scratch)けど、煩わしいので、Altキー+ドラッグでアンカー文字列を選択したときに保存処理を無効にするGreasemonkeyスクリプトを書いた。単純にリンクをAltキー+クリックしたとき(選択文字列がないとき)は、何もしない(保存処理が働く)。

他のスクリプトリンクを左ボタン長押しによって新規タブに開きたい - rikubaの日記)と競合することがあったので、キャプチャリングフェーズでイベントを捕捉するようにした。
// ==UserScript==
// @name           selectAnchorTextByAltDrag
// @namespace      http://rikuba.com/
// @include        *
// ==/UserScript==

document.addEventListener('click', {
  handleEvent: function (e) {
    if (e.altKey && e.button === 0 && window.getSelection().toString() &&
      this.isAnchor(e.target)) {
      e.preventDefault();
      e.stopPropagation();
    }
  },
  isAnchor: function () {
    var expr = document.createExpression('ancestor-or-self::*[@href]', null);
    var xr = null;

    return function (node) {
      xr = expr.evaluate(node, XPathResult.BOOLEAN_TYPE, xr);
      return xr.booleanValue;
    };
  }(),
}, true);