WebブラウザからWindowsアプリケーションを開く[追記あり]
Webアプリケーションは基本的に制約を受けます。
ブラウザを超えることは基本的にできない、というのが常識ですが、どうしてもカスタムしてほしいという話も無くはありません。
そこで今回は WebブラウザからWindowsアプリケーションを開く という荒業をご紹介します。
事前情報
今回行う方法は 非常に特殊なケース です。
この技術を 当たり前のように使うこと は推奨されておらず、いつ稼働しなくなるかもわからないということを事前にご理解ください。
また、OSのシステム領域を操作することがありますが、発生した事象等はすべて自己責任であることをご承知ください。
大前提
まず大前提ですが WebブラウザからWindowsアプリケーションを開く ということを、Webシステム側から操作することは原則できません。
皆さんがリンクやブックマークなどでWebページが開けるのは httpsやhttpsから始まるのはURLだぞ という設定がされており、そのあとに続く文字列で接続先を指定しているからです。
そのため、「tel」や「mailto」で電話やメーラーが起動するのは、そのような設定がされているからです。
(起動するメーラーなどが異なるのは、設定されている内容が各デバイスで異なることに起因します)
つまり スキーマと関連するアプリケーション を登録すればOSがアプリケーションを起動させる、というわけです。
アプリケーションを開けるようにする(追記あり)
では 「スキーマと関連するアプリケーション」 を登録しましょう。
下記のプログラムを作成します。
1 2 3 4 5 6 7 8 9 10 11 |
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\paint] "URL Protocol"="" [HKEY_CLASSES_ROOT\paint\shell\open] [HKEY_CLASSES_ROOT\paint\shell\open\command] @="\"C:\\Windows\\System32\\mspaint.exe\" \"%1\"" |
このファイルの中の 「paint」 の部分が 今回設定するスキーマ です。
そして一番最後のプログラムまでのパスが、起動させたいアプリケーションの場所です。
このファイルを作成したら、ダブルクリックをすることでインストールをすることができます。
2020/08/27 追記
レジストリ登録ファイル(.regファイル)は実行すると確認アラートが出ます。
確認アラートで不都合がある場合、Windowsバッチファイルにて登録することもできます。
1 2 3 4 |
REG ADD "HKEY_CLASSES_ROOT\paint" /t REG_SZ /v "URL Protocol" /f REG ADD "HKEY_CLASSES_ROOT\paint\shell\open\command" /t REG_SZ /d "\"C:\Windows\System32\mspaint.exe\" \"%%1\"" /f |
テストする
インストールが完了したら、テストファイルを作って試してみましょう。
1 2 3 4 5 6 7 8 9 |
<html> <head> <meta charset="UTF-8"> <title>カスタムスキーマ テスト</title> </head> <body> <a href="paint:">Webからアプリを起動する</a> </body> </html> |
上記のHTMLファイルを作成し、ブラウザにドラッグ&ドロップしましょう。
画面に表示された 「Webからアプリを起動する」 をクリックし、アプリケーションが起動したら成功です。
毎回確認するモーダルを出さないようにする(2020/08/27 追記)
Google Chrome 85にて、確認モーダルが毎回出る(再確認しないためのチェックボックスが出てこない)という事態になりました。
下記のサイトにて様々な話が出ていますが、どれも効果がありませんでした。
Google Chrome no longer displays “always open these types of links in the associated app” checkbox FIX
“Always open these types of links in the associated app” checkbox is not displayed
内容は「レジストリを変更する(ExternalProtocolDialogShowAlwaysOpenCheckbox を追加する、URLWhitelistを追加する など)」「古いChromeにバージョンを下げる」などですが、どの方法でもダメでした。
どうやらこれはセキュリティアップデートによるもので、これの解決方法は「SSL環境(HTTPS)でアクセスする」ことでした。
皆さん解決策が見つかっていない様子でしたので、こちらの記事にて記載させていただきます。
さいごに
今回はかなり特殊なケースでの解決方法をご紹介しました。
本当はこの方法を使わなくてもできると良いのですが、世の中ままならないものですね。
- おすすめ記事
POPULAR
のえる
Full-stack Developer