再一次,又是因為工作上的需要,希望能在網頁上啟動使用者端的應用程式
其實這也不是新聞啦!因為之前就寫過了,只是之前幾乎都是使用ActiveX
但現在使用ActiveX呢,要設一堆安全性,還可能要簽署(有需要可以參考使用經濟部工商憑證簽署ActiveX控制項),真是麻煩到爆
若是使用者只有少數或Intranet或有區域性那都還好,若要給普羅大眾用,這樣的做法真的不太優雅,更遑論IE以外的瀏覽器都不能用
窮則變,變則通,想起之前網頁瀏覽IPhone Apps,例如:鼎鼎大名的Angry Birds
點了View In ITunes後,Google Chrome會出現如下的畫面
而IE會出現
FireFox
Safari好樣的,根本連提示訊息都沒有,就直接開啟應用程式了
總之,就是有跨瀏覽器且更優雅的方式,OK!Let's do it!
Google了一下,找到解決方案了,答案就在這,Registering an Application to a URL Protocol
如果不想看Microsoft官方文件的,就往下看吧!
做法其實相當簡單,就是要到Registry裡註冊一個URL Protocol,然後加入一些key跟subkey,不過看文字看得眼睛都花了,我們不如開啟登錄編輯器,看看ITunes裡的itms:是如何定義的
首先找到HKEY_CLASSES_ROOT\itms,匯出
存檔為test.reg
使用文字編輯器打開後,我們會看到如下的內容
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\itms]
@="URL:iTunes Store Protocol"
"AppUserModelID"="Apple.iTunes"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\itms\DefaultIcon]
@="C:\\Program Files (x86)\\iTunes\\iTunes.exe"
[HKEY_CLASSES_ROOT\itms\shell]
@=""
[HKEY_CLASSES_ROOT\itms\shell\open]
@=""
[HKEY_CLASSES_ROOT\itms\shell\open\command]
@="C:\\Program Files (x86)\\iTunes\\iTunes.exe /url \"%1\""
藍色的部分,是這個Protocol的描述,您可以改為自己的描述
紅色的部分,是要啟動應用程式所在路徑(第一個其實是IE對話視窗裡左上角那個圖示所在位置,若您懂得我在說甚麼,您可以自訂為其他位置)
綠色的部分,後面感覺是對到下面的Key,但是我刪掉後好像也沒甚麼影響,就先不理,刪了它吧
紫色的部分,就是Protocol的名字,以下的例子使用的Protocol為kai
改完之後結果像這樣
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\kai]
@="URL:Kai Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\kai\DefaultIcon]
@="D:\\Kai\\bin\\Debug\\Kai.exe"
[HKEY_CLASSES_ROOT\kai\shell]
@=""
[HKEY_CLASSES_ROOT\kai\shell\open]
@=""
[HKEY_CLASSES_ROOT\kai\shell\open\command]
@="D:\\Kai\\bin\\Debug\\Kai.exe /url \"%1\""
存檔為*.reg,接著Double Click存檔後的*.reg,按"是"
這樣就註冊完成一個新的Protocol,再檢視一次看看
接下來撰寫Kai.exe
內容如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Kai
{
class Program
{
static void Main(string[] args)
{
string ss = "";
foreach (string s in args)
{
ss += "\n" + s;
}
Console.Write(ss);
Console.Read();
}
}
}
接下來讓我們做一個html檔,內容如下
<html>
<body>
<div></div>
<a href="kai://somethingforexe">測試一下</a>
</body>
</html>
使用IE開啟這個html檔並點選超連結
傳遞進來的參數也收到了,接下來,一樣自行發揮囉
成功! :)