WebページからWindowsアプリを起動する

Windowsでは予めURLスキームを設定しておくことで、Webページ(ブラウザ)からアプリケーションを起動することができる。イントラネット業務アプリの世界で稀に利用されるようなものだったが、近ごろオンラインビデオ会議のクライアントを立ち上げるのによく目にするようになった。

クライアント設定

事前にクライアントとなるWindowsのレジストリに、スキーム名と対応する動作を登録する必要がある。スキーム名を「xxxx」とした場合、レジストリに以下を設定する。

HKEY_CLASSES_ROOT\xxxx

名前 種類 データ
(既定) REG_SZ URL:xxx Protocol
URL Protocol REG_SZ

HKEY_CLASSES_ROOT\xxxx\shell\open\command

名前 種類 データ
(既定) REG_SZ example.exe "%1"

example.exeの部分に実行したいアプリをコマンドライン形式で記述する。なお起動するアプリは事前にインストールされている必要がある。

Webページからの呼び出し

WebページからそのスキームのURLを開かせる。

<a href='xxxx://hogehoge'>start application</a>

開く方法はリンクでもjavascriptでもよい。ただブラウザにブランクページが表示されるので、iframeを設置してその中で開くとよいかもしれない。hogehogeの部分はなんでもよいが、スキームのみ(xxxx://)ではだめなようだ。

URLを開くとブラウザから確認のダイアログが表示される。実行を許可するとレジストリのコマンドが実行される。

情報の受け渡し

Webページからアプリへ

コマンドライン引数にURLが渡されるので、文字情報であればURLのパスやクエリ式でアプリに情報を渡すことができる。

location.href = "xxxx://start?id=hoge&type=1"

ただし通常のURLと同様にURLアンセーフな文字はbase64URLエンコードするなどの処理が必要。

アプリからWebページへ

残念ながら起動されたアプリからWebページへ情報を渡す方法は無い。既存サービスの挙動を見る限り、そもそもアプリがきちんと起動したかどうかも確認のすべがないようだ。あくまでブラウザからOSにスキームを渡しているだけなのだろう。

起動時にクライアントIDなどを渡して、WEBサーバを経由するなどするしかなさそう。

コメント

コメントを投稿