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サーバを経由するなどするしかなさそう。
Windows10 Installoption
返信削除