キーボードだけでページ内のテキストのコピーを簡単に出来るようにするブックマークレット

普段はマウスやらトラックパッドは使わないのだけど、テキスト選択のときだけはわざわざ使わないといけない。

僕にはそれが苦痛でしょうがない。

Opera の空間ナビゲーションは、特定の EventListener の付いている要素にもフォーカスしてくれるので、これを利用して普段はフォーカス出来ない要素にもフォーカスできるようにしてみる。

javascript:(function(tag){[].forEach.call(document.getElementsByTagName(tag),function(e){e.addEventListener('mouseover',function(){;},false)});})('pre');

これで pre 要素にもフォーカスできるようになる。(一番最後の 'pre' というところで指定)

[].forEach.call(likeArray,func) という書き方は下を参考にした。

ただし、OperaSafariは汎用的な簡易表記(generic shorthand)はサポートしていません。が、下記のように互換コードで対応することは可能です。

if (!Array.forEach) {
	Array.forEach = function(likeArray,func){
		Array.prototype.forEach.call(likeArray,func);
	}
}
Array.forEach(document.getElementsByTagName("head"),function(a){
	alert(a);
});
Opera9.2から9.5でのJavaScript周りの変更点 - 0x集積蔵

pre じゃなくても p でも div でも良いんだけど、うまくいくところとそうじゃないところがあるので、そこらへんは臨機応変に。例えばこのブログではちゃんとテキスト要素に p タグが付いているので p タグ指定でテキストにフォーカスできるが、Google 検索結果のようにタグのない単なるテキストノードだったりすると '*' (全タグ) 指定しても検索結果の抜き出し文のところにはフォーカスできなかったり。

javascript:(function(tag){[].forEach.call(document.getElementsByTagName(tag),function(e){e.addEventListener('mouseover',function(){;},false)});})(prompt('Enter the tag name you want to focus.'));

とすれば自分でタグ名を指定することもできるけど、そこまでは冗長かなと思う。

使い道のありそうな pre, p, div, span, table, ul, ol, li あたりを別々のニックネーム (例えば focuspre, focusdiv など) でブックマーク登録しておいて、用途ごとに使うのがいいかも。

ちなみに、選択範囲の HTML ソースをコピーするのは、こちらも os0x さん作のブックマークレットがあるので、これと相性が良いかも。


あ、こういうふうにカスタム検索エンジンに登録しておくという手もあるな。

javascript:(function(tag){[].forEach.call(document.getElementsByTagName(tag),function(e){e.addEventListener('mouseover',function(){;},false)});})('%s');


気付いたのだけど、空間ナビゲーションでフォーカス可能な要素が入れ子になっていたら、一番内側の要素しか実際にはフォーカスできないらしい。
空間ナビゲーションってよくできてるね。
Crossfireとかの類似品はそこまで考えてないんじゃないかな。使ったことないけど。

しかしこのブックマークレット的には困ったな。