選択した範囲のURLをまとめて開くBookmarklet

Google Chrome 6.0.472.53 betaで動作確認。
厳密に動作を検証したわけではないので、予期せぬ動作をするかもしれません。

javascript:var r=getSelection().getRangeAt(0),b=r.startContainer,e=r.endContainer,t='childNodes',b=b[t][r.startOffset]||b,e=e[t][r.endOffset]||e,t='firstChild',c='nextSibling';while(r=b[t])b=r;for(;;){if(r=b.href)open(r);while(b!=e&!b[c])if(b=b.parentNode,r=b.href)open(r);if(b==e)break;b=b[c];while(r=b[t])b=r}!1


Web Inspectorから動作確認したときはwindow.openがポップアップブロックに引っ掛かって、さらに解除しても新規ウィンドウで開いたが、Bookmarkletとして実行するとポップアップブロックに引っ掛からず新規タブで開かれるみたい。


ちなみにos0xさんのLDRですべての外部リンクをバックグラウンドタブで開くUserScripts - os0x.blogの方法でミドルクリックをエミュレートしても、Web Inspectorだとポップアップブロックに引っ掛かってwindow.openと同じ挙動となった。

Bookmarkletの短縮化作業の間に使った手法など。
  • 長いメソッド名を変数に格納
  • 1文字の識別子名(変数・メソッド)
  • 変数の使い回し
  • "window."の省略
  • &&を&に置き換える (左右の項がtrue or falseの場合に等価)
  • while(1)をfor(;;)に置換
  • カンマ(",")演算子の使用 (カンマ演算子は右辺の値を返す)
  • ブロック末尾直前のマルチステートメント(";")省略
  • javascript:疑似スキームの末尾に置かれるvoid(0)を!1に置換 (false, null, undefinedだとページ遷移しない模様)
  • 変数定義(var)で同じ変数を何度も列挙 (var a=1,b=2,a=3のような記述で、左辺の値を右辺で参照可能)
使っているDOM API
  • window.open
  • window.getSelection
  • Selection#getRangeAt
  • Range#startContainer
  • Range#startOffset
  • Range#endContainer
  • Range#endOffset
  • Node#firstChild
  • Node#childNodes
  • Node#childNodes[]
  • Node#nextSibling
  • Node#parentNode