再一次,又是因為工作上的需要,希望能在網頁上啟動使用者端的應用程式

其實這也不是新聞啦!因為之前就寫過了,只是之前幾乎都是使用ActiveX

但現在使用ActiveX呢,要設一堆安全性,還可能要簽署(有需要可以參考使用經濟部工商憑證簽署ActiveX控制項),真是麻煩到爆

若是使用者只有少數或Intranet或有區域性那都還好,若要給普羅大眾用,這樣的做法真的不太優雅,更遑論IE以外的瀏覽器都不能用

 

 


 

窮則變,變則通,想起之前網頁瀏覽IPhone Apps,例如:鼎鼎大名的Angry Birds

20110728_001.jpg  

點了View In ITunes後,Google Chrome會出現如下的畫面

20110728_002.jpg  

而IE會出現

20110728_003.jpg  

FireFox

20110728_004.jpg  

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,匯出

20110728_005.jpg  

存檔為test.reg

20110728_006.jpg  

使用文字編輯器打開後,我們會看到如下的內容


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,按"是"

20110728_007.jpg  

20110728_008.jpg  

這樣就註冊完成一個新的Protocol,再檢視一次看看

20110728_009.jpg  

接下來撰寫Kai.exe

20110728_010.jpg  

20110728_011.jpg  

內容如下



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檔並點選超連結

20110728_012.jpg  

20110728_013.jpg  

傳遞進來的參數也收到了,接下來,一樣自行發揮囉

成功! :)

    慢飛 發表在 痞客邦 留言(4) 人氣()