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をリリースしたはてなスターが押せるようになったり。