OperaのJavascriptの怪

Operaブックマークレット使おうとするとうまくいかないことが多々。特に、今開いているURLをはっつけて使うような、それこそCiteULikeの様なブックマークレットでうまくいかない。

javascript:location.href='http://jp.citeulike.org/posturl?username=unnonouno&url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title)

代替手段がないかもにょもにょ調べると、だいたいナニが起こっているのかわかった。つまるところ、location.hrefで、今開いているページのURLをとってきて、それを新しく開きたいURLにはっつけてるわけだ。んが、上の様なブックマークレットで実際に使おうとすると、location.hrefのところに、'javascript:location...'の部分が代入されてしまうわけです(無限に再帰するわけではないが)。うーん、そんなもの参照されても…。

どうも、いろいろ試してもダメっぽいのでぐぐってたら回避方法を発見した(コメント参照)。Operaでブックマーク開くときに「新しいページで開く」とdocumentの参照先が、今まさに開かんとするページに向いてしまうようである。そのため、location.hrefが上のように今まさに開かんとするページのURLであるところの、'javascript...'になるっぽい。「新しくページを開かない」設定にしておくと、documentが今まで見ていたページに向くため、うまくいくようだ。というか、うまくいった。
しかし、まぁそれはそれで使いづらくてイヤなんだが、その辺り修正してくれないかなぁ。

追記:

読み返してみると、何かいてんのかよくわからないので追記。Operaはbookmarkを開くときのデフォルト動作を設定できます。ふつうは、「新しいページで開かない」設定になっていて(Reuse existing pageがon)そのままだと元のタブの上から開こうとするのでdocument.URLなりなんなりで、元のタブのURLをとれます。これだとbookmarkletも期待通りの動作をしてくれてOK。が、個人的にはデフォルト動作を「新しいページで開く」ようにしているので(Reuse existing pageがoff)、それだとbookmarkを開いたときにまず新しいタブがでて、新しいタブのURLをとろうとするので、元のタブのURLがとれない。まぁ、そんな話。
なわけで、デフォルト動作が「新しいページで開く」になり、bookmarkletだけ「新しいページで開かない」様にしたい。bookmarkの一覧から右クリック→Openで開いたけどダメだった。残念。