ぺんちゃん日記

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

Chrome のバージョンアップによりいくつかのスクリプトが動作しなくなった【AutoHotkey】。

f:id:yasushiito:20190403184928p:plain

トラブルは突然に。

AutohotkeyChrome を操作しているときになんか Chrome がおかしな動きをするなと違和感を覚えていたのですが、昨日とうとう大問題が発生しました。
タブを探索する処理が終わらなくて延々とタブ切り替えと URL のコピーが行われてしまうのでした。
探索から脱出するための処理は組み込んであったのですが、それが正常に動作しなかった模様。
Chrome 以外のアプリケーションに切り替えても情け容赦なくキー送信を続けるのでいろんなアプリケーションが無茶苦茶になりました。
何よりスクリプトを止めることができない。
そして Windows を再起動することもできない。
一体何が起きているんだ?
こんな時に限って普段は起動しているはずのタスクマネージャーも起動してません。
タブ切り替えの処理は Ctrl +aの後に Ctrl + C 繰り返しているから、下手なアプリケーションに切り替えたら大量にコピーが出来上がってしまう恐れもあります。
なんとか脱出できる方法はないものだろうか。
Auto HOT key って怖いな。
こんなにも簡単に PC を操作不能に陥らせられるんだ。
今更な感想過ぎます。
ひたすらキー入力を繰り返さ様を眺めるだけの時間が過ぎ去りました。
復旧のきっかけはメッセージボックス。
メッセージボックスを表示している間はキーの送信が止まるんです。
ただし メッセージボックスは10秒程度で消えてしまうのでその間に脱出操作をします。
一瞬の隙をついて作業ウィンドウを開いてしまえばタブの探索は終わるので脱出できます。
本当に危なかった。

原因を探る。

URL を取得する際に入力フォーカスが URL バーにうつされるのですが、ここで入力フォーカスが失われてしまいます。
そこでURL バーから安全に Web ページ側に入力フォーカスを移す方法として、 URL バーに javascript: と入力する方式を採用しているのでした。

yasushiito.hatenablog.com

Chrome のアップデートにより、この操作が許されなくなりまして、私はロボットではありませんページが開いて、チェックに対応しなければ先に進ませてもらえなくなってしまいました。
ページ遷移してしまうため URL が書き換わってタブが一周してきた事を判定できなくなっていたと。
そのスクリーンショットを撮ろうとしましたが、今日現在ロボットではありませんページは表示されなくなっています。
問題多発で再度修正したのかな?
現在の仕様では、単純に javascript を検索ワードにしたウェブ検索になっています。
URL から JavaScript を実行できるという仕様自体が問題あったんですね。
これは仕方ない。

対策を考える。
とりあえずタブを探す処理は永久ループにしないで、一定回数を経過したら脱出するようにしました。
人間の操作を肩代わりしてくれるスクリプトなんだから100回を超えるループはおかしい。
これからは他の処理も含めて永久ループはやめて必ず脱出できるようにしよう。
もう一つ、入力フォーカスを戻すための URL バーに対する JavaScript の空打ちも中止します。
ブログ編集作業が面倒になるが仕方がありません。
抜本的な対策は後に回します。

今回のトラブルを受けて。

自分が作業している目の前で発生したので 状況の確認と操作手順は確認できていましたが、これがもしお客さんに渡したスクリプトがリモート先で暴れたらと想像すると背筋が凍ります。
特にメールソフトの Thunderbird では受信ボックスのメールが全部アーカイブされてしまって泣きそうでした。
あちこちクリックしている間にサンダーバードにフォーカスを移してしまったので、そちらにキー操作を送信しちゃったのでしょう。
まだアーカイブで助かったな。
メールを全削除されてしまったら泣けてしょうがない。
安全を考慮するならウインドウハンドルを見張って他のアプリケーションには操作を送らないチェックを噛ませた方が良いかもしれない。