Hatena::ブログ(Diary)

Yet Another Hackadelic

2007-08-22

選択範囲のリンク一覧からPathtraqの解析クエリ編集画面を開くBookmarklet

作ってみますた。

DOM Rangeに対応してるブラウザなら動くと思います。

(function(contentWindow) {
  var links = [];
  var seen = {};
  var selection = contentWindow.getSelection();

  if (!selection || !selection.rangeCount) 
    return;

  var findLinks = function(selectionRange, links, seen) {
    var dummy = contentWindow.document.createElement("div");
    dummy.appendChild(selectionRange.cloneContents());

    var anchors = dummy.getElementsByTagName("a");
      
    for (var i = 0, l = anchors.length; i < l; i++) {
      var url = anchors.item(i).href;
      if (url && url.indexOf("http") == 0 && !seen[url]) {
        links.push(url + "*");
        seen[url] = true;
      }
    }
  };

  for (var i = 0, l = selection.rangeCount; i < l; i++) {
    findLinks(selection.getRangeAt(i), links, seen);
  }

  links.push("javascript:void(0);");

  contentWindow.location.href = "http://pathtraq.com/analytics?url=" + encodeURIComponent(links.join("\r\n")) + "&m=hot";
})(window);

最後の方にわざとjavascript:void(0)なリンクを差し込んでPathtraq側でinvalidな形にして編集画面のままにしてあります。

あと、cloneContents()で出来たDocumentFragmentだけど、getElement*なメソッドは使えないっぽぃ。

仕方無いのでcreateElement()で適当なelement node作ってappendChild()してみた。

DOMもJavaScriptも良く分からんです。

辺りでやると面白いかも。

蛇足だけどshibuyapm.ring.hatena.ne.jpで未だに参加承認がおりません。w

id:naoyaさん、気づいてくれないかなー。

参考

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

トラックバック - http://d.hatena.ne.jp/ZIGOROu/20070822/1187800632