ぺんちゃん日記

食と歴史と IT と。 Web の旅人ぺんじろうが好奇心赴くままに彷徨います 。

【AutoHotkey】Chromeブラウザで表示中のページの URL を取得したい。

f:id:yasushiito:20190403184928p:plain

タブブラウザではタブ選択したい。

ブラウザでタブを判別して、目的のタブを選択したいことがあります。
AutoHotkeyではウインドウのタイトルを利用して判別することになります。

表示中のページに判別の手がかりになる決定的なキーワードが含まれるページを表示していれば良いのですが、情報量が少なくてなんともしがたいことも往々にしてあります。
表示ページの URL さえ手に入れることができれば決定的なのですが、 Auto HOT key からはそれを取得することはできません。
キーボードショートカットを利用してブラウザのオプションメニューなどから簡単に取得したいところですが、これが案外できそうでできません。

URL バーがあるじゃないか。

ブラウザには URL を入力する URL バーがあります。ここからからもらうのが最も確実です。
Google Chrome の場合、ショートカットキー Ctrl + L で URL バーにフォーカスできます。
ブラウザがアクティブであれば、このショートカットキーで必ず URL バーをフォーカスしてくれます。
URL バーをフォーカスした瞬間に URL が全選択されるのでそれをそのままコピーすれば良いです。
ただし、フォーカスがすでに URL バーに乗っかっている場合には何もアクションがありません。
より確実に URL をクリップボードに送りたいならば、 Ctrl + Aで全選択します。
つまり、 Ctrl + L、 Ctrl + A、Ctrl + C の順番でキー送信すれば URL は手に入ります。

ここまではググればオッケー、AutoHotkeyのユーザーコミュニティで情報が共有されているかと思います。
私は今のところこのやり方で URL を取得しています。

URL バー取得で問題が出るケース。

URL バーにフォーカスを移すので、表示ページ上のフォーカスを失います。
URL バーから tab キーを送信するとページの最初のフォーカス対象に飛びます。
つまり、入力フォームで編集している時に URL を取得すると、元の入力フィールドに戻ることができないのです。
これは痛い。
キーボードショートカットから何事もなくページ本体にフォーカスを移すそうなものですが?
Autohotkey からも入力ポジションを記憶することはできなさそうです。

Chrome 拡張による解決。

ブラウザにインストールできるなら、 Chrome 拡張の中から URL を取得してクリップボードに転送する機能を備えた物を使えば良いです。
ブラウザが得意とするJavaScript 経由で転送してもらいます。
例えば、以前紹介したCopy URL+で可能となります。
URL をコピーする拡張はたくさんありますので、お好きなものを探してください。
私の場合Cキーを入力したら URL をクリップボードにコピーするように設定しています。

chrome.google.com

何事にも例外はある。

ただしこの方式で失敗するケースもあります。
入力ボックスで入力中の場合。
入力フォーカスを URL バーから安全にページに移すことはできないものでしょうか?
ここさえ乗り切れば問題を克服できそうなのですが。
そして、検索可能な状況まで問題が整備されつつあります。
検索ワード「Google Chrome フォーカスをページに」あたりでどうでしょうか。

ああ見つかりました。

randyumi.hatenablog.com

なるほど。
自分がやりたいことはこの記事の内容で間違いなさそうですが…。

JavaScript でフォーカスを戻す。

URL バーに入力して JavaScript ページを表示させるの?
URL バーを書き換えるのが気持ち悪いですけど…。
騙されたつもりで試してみましたら、期待通りに動いてくれました。

詳しいことは分かりませんが、URL バーから JavaScript を実行できて、スクリプト実行後はページにフォーカスが戻るということなのかな。
それで空っぽの JavaScript を URL バーにコマンド送信すれば、何もしないままページに戻るという理屈のようです。

JavaScript 実行後は URL が元の表示ページに書き換わってくれます。
安心して URL による JavaScript 実行できますね。

試してみる。

実際にAutoHotkeyで試してみます。

手順は次のようになります。

これくらいなら簡単ですね。
Google Chrome 専用です。
ホットキー Windows +1で起動できますから、次のスクリプトを常駐させた上で Google Chrome をアクティブにしてから試してみてください。

入力ボックスとそれ以外の場所で確認してみてくださいね。

まとめ

これで拡張機能を使わなくても状態を壊さずに URL を取得できます。

この方式にも副作用はあります。
クリップボードの内容が破壊されます。
URL バーの状態がリセットされます。
例えば URL を選択中だったり、特定の位置に入力カーソルを配置していたとしても、その状態を破棄されます。
また、 URL バーに入力フォーカスがあった場合は、強制的にページの方にフォーカスを移されます。