Hatena::ブログ(Diary)

by edvakf in hatena

2008-10-21

Hit-a-Hintブックマークレット一応完成

というわけで、自分でキーをカスタマイズできるように、Hit-a-Hint Generator というページを作った。

ページは英語なので、使い方を下にざっと書いておく。

現在は Opera 9.50 以上のみ対応。近い将来に他のブラウザで動くようにすることはないと思う。

Safari が getBoundingClientRect と getClientRects に対応したら考えるかも。


やり方

上のページへ行って、Create という見出しのところで、自分の好きなキーを入れていく。

  • Hint Keys というのは、ヒント表示に使う文字を切らずに続けて入力。
    • 数字も記号 (バックスラッシュやらシングルクオーテーション、ダブルクオーテーション以外) も大丈夫だと思うけど、アルファベットでしか試していないので知らない。
  • Open Key というのは、選択ヒントが複数あったときに、その全部を開くキー。
    • 選択ヒントが1つのときは、現タブでリンクを開く。
    • Shift, Ctrl, Alt のいづれか、または2つ以上が押されているときは、選択ヒントが1つでも新しいタブで開く。
    • Opera の仕様で、Shift+Ctrl+Enter で開くリンクは背面になるので、ここのキーは Enter から変えないほうがいいと思う。
  • Click Key というのは、マウスによる通常のクリックをエミュレートする。
    • 2つ以上ヒントを選択しているときは、2つ目以降は無視される。
    • 普通のリンクなら、ページを開く。(位置は target 属性に従う)
    • href が "#" か "javascirpt:void(0)" なリンクと、onclick 属性のある画像では、その要素に関連づけられた javascript を実行する。
    • 入力欄ならフォーカス。
    • 選択肢なら選択。
  • Separator Key というのは、次のヒントを選択するために区切りに使うキー。
    • 例えば a というヒントと af というヒントが表示されていて、a を選んでから af を選ぶときは、a を押して、この Separator Key を押してから、af を押す。
    • ヒントが一意に特定できる場合は自動的に選択するようにしたので、あまり使うことはないと思う。
    • これにアルファベットキーなどを割り当てることもできるが、その場合は、ページのタイトルに付くヒント一覧は便宜的にスペースで区切られる。
  • Backspace Key というのは、ひとつ前に選択したヒントを未選択状態にするキー。
    • 選択中のものがあるときは、それを最初に消す。
    • 何個も続けて消せる。
  • Link Color というのは、通常のリンクに付けるヒントの色。
  • Clickable Element Color というのは、入力欄や JavaScirpt リンクに付けるヒントの色。
  • Selected Hint Color というのは、選択したヒントの色。

これらすべてを選択して、Make Bookmarklet ボタンを押すと、ブックマークレットが現れるので、それをキーボードショートカットに登録する。

ちなみにデフォルトで選択されているのは僕の設定。けっこう快適です。

言うまでもなく、同じキーを2度使ったりすると不具合が起きるので、そんなことはしないように。


その下は補助ユーザーJS。別に無くても構わないけど、Hit-a-Hint を使うときにあると便利。

  • HaH-accelerator.js
    • CSSをページロード時に適用することにより、1つのページで1回目にヒントを描写するのが2〜10倍程度速くなる。2回目からは変わらない。

以上。

いろいろ助言を下さった Griever さん、 os0x さん、どうもありがとうございました。JavaScript は初心者に毛が生えた程度の自分の力だけではとても無理でした。

あ、そういうことなので、書き方に統一感が無かったりしますが、別に大して速度に影響するわけでもないし、動いてるので放っておきます。ver. 2.0 を出すことがあれば修正するかも。


恥ずかしいことに、デバッグ用に使ってた関数 (時間測定) が残ってたのでこっそり差し替えた。動作に影響はありません。

tyoro.exe: Hit-a-Hintをoperaで使うで tyoro さんに指摘された問題を修正。デフォルト設定でインストールした人を含み、ほとんどの人がアップデートが必要だと思います。

2.0をリリースした。はてなスターが押せるようになったり。

nonenone 2008/12/14 10:14 Hit-a-Hintブックマークレットいいですね!
ただこれ、Open Keyを押したときにCtrlを押していれば強制的に新タブで
Ctrlを押していなければブラウザに任せるみたいなことって出来ますか?

Firefox 3.1 beta2にTab Mix Plusを入れて他サイトへのリンクを新タブで開くようにしてるので
Ctrlを押していないときでも他サイトへのリンクは新タブで開いてほしいのですが

edvakfedvakf 2008/12/14 11:45 Firefoxならこっちの修正版を使ったほうがいいかもしれません。
http://d.hatena.ne.jp/CoolDriver/20081204/p2
僕の版とけっこう違うところもあるので、お好きなほうで。
(このあたりも近いうちに取り込もうと思っているのですが、今のところは実現していません)

で、ブラウザに任せる方法ですが、ソース内で '_top' と検索し、こんな感じのところ
var windowname = (choices.length == 1 && !modified) ? '_top': '_blank';
が引っ掛かると思うので、これを
var windowname = (choices.length == 1 && !modified) ? null : '_blank';
とするといいと思います。Firefoxのことはホントに知らないので、動かなかったらごめんなさい。

edvakfedvakf 2008/12/14 12:41 やっぱ自分でアップデートすることにします。すぐ出来ると思いますので、ここに書いてお知らせします。

nonenone 2008/12/14 13:15 ありがとうございます。
示していただいたサイト導入するときに参考にさせて頂きました。

アップデート中と言うことで必要ないかとは思いますが一応、報告しておきます。
'_top'をnullに変更してみましたがFirefoxはwindow.openは必ず新タブでしか開けないようなので
同ドメインでも新タブで開いてしまいました。

isananisanan 2009/04/16 22:43 これ便利ですね。

私の使い方からするとvimperatorのようにヒントが確定した時点でページを移動してくれる方
が嬉しいですね。

edvakfedvakf 2009/04/17 05:11 isananさん
僕はそれが嫌いでしょうがなかったんですよね。しかもVimperatorのように数字(遠いキー)だと押し間違いが多かったので。
そしてMigemoで選択できるようにしたら、今度は押し間違えたときに自分のまったく把握しないところに飛ぶわけです。←この感覚伝えにくい。。

ココココ 2009/11/23 06:50 はじめまして。
Hit-a-Hintブックマークレット、とても便利に利用させてもらってます^^
一つお伺いしたいのですが、hintを複数選択した後にEnterを押すと、選択されたhintが新規タブで開かれますよね?
これを、単にEnterで開いたときは現在開いているタブ上書きも含めて開くことはできないでしょうか?
分かりにくい説明で申し訳ないのですが、
AというページからB,C,DをマークしてEnterを押したときに、現在はA,B,C,Dのタブがブラウザ上に展開されることになるとろを、
Enter後はB,C,Dのタブが展開されるようにしたいのです。
もし、Aも残してB,C,Dを展開したい場合は、Shiftを押しながらEnterというのが自然かなと自分の中では思ったりしてます。
(hintを1つ選択した場合の現在の動作と同じイメージかと思うのですが、いかがですか?)
お忙しいところ恐縮ですが、ご返答のほどよろしくお願い致します。

edvakfedvakf 2009/11/23 07:29 うーん…
僕の好みとは違います。と言えば納得していただけるでしょうか。

その場合、B,C,D の違いは押した順番でしかないので、それらを同等に扱いたいのです。どれを現在のタブに開いてほしいかまで考えて選択するのは好きではないですね。
また、shift が押されているか押されていないかで場合分けをしたくないんですね。というのも、それらは OS とブラウザ依存なので、例えば Win Opera は Shift を見ればいいけど Mac Opera は Command を見ないといけないとか (実際そういうことになっているのです)、そういうことを言い出したらキリが無いので。

もしご自分で修正して公開される場合は、僕の書いたものはパブリックドメインとして自由に使っていただいてかまわないので、それで許してください。

ココココ 2009/11/23 07:46 了解です^^
素朴な疑問なのですが、例えばニュースサイト(A)などで、リンクXとYとZの記事を読もう、と思った場合は
どのようにしてらっしゃいますか?
私の場合は
XとYとZのhintをマークしてCtrl+Shift+Enterでバックグラウンドタブとして展開した後に、Aを閉じてから
記事の消化に入っています。
くだらない質問で申し訳ありませんが、新たなライフハックでも見つけられたらなと思いまして^^;

edvakfedvakf 2009/11/23 08:09 一般論としては、Opera だとタブを閉じると右のタブに移るので、A X Y Z という順番で自分が A のタブにいたら、閉じながら読んでいくと良いと思います。

僕の場合はタブを閉じると左のタブに移るように変更しているので、まず Z まで行って、閉じながら A まで戻ります。最後に A まで辿り付いたら A を閉じると。

ココココ 2009/11/23 08:21 レスありがとうございます。
勉強になりましたm(_ _)m

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証