經過自定義URL協議在Web中啓動本地應用程序html
一、註冊應用程序來處理自定義協議shell
你必須添加一個新的key以及相關的value到HKEY_CLASSES_ROOT中,來使應用程序能夠處理特殊的URL協議。瀏覽器
新註冊的key必須與協議scheme相匹配才能夠被添加。例如,增長一個「alert:」協議,被增長到HKEY_CLASSES_ROOT的key必須是alert。在這個新的key之下,默認的字符串value將顯示新協議的名字,而且URL協議字符串value將包含協議特有的信息或者空字符串。Keys將一樣被添加到DefaultIcon和shell中。安全
默認的DefaultIcon key的字符串value必須是新URL協議圖標文件名的路徑。app
在shell key之下,一個key使用一個動詞(就像open)將被添加。一個command(命令) key和一個DDEEXEC(動態數據交換執行) key都是使用動詞來添加的。這command和DDEEXEC keys以後的values都是用來調用(或者啓動)處理新協議的應用程序。測試
二、啓動處理程序編碼
當一個用戶點擊一個註冊了你的自定義URL協議的連接後,Windows Internet Explorer(IE)啓動註冊的URL協議的處理器。若是指定shellopen命令在註冊表中包含一個%1參數的話,Internet Explorer傳遞這個URI給註冊協議的處理器。這最後的統一資源標識符(URI)被編碼(%1);即16進制換碼符被轉換爲等價的UTF-16字符。例如,用%20字符串取代空格。spa
安全警示:應用程序處理URL協議必須全力面對惡意數據。由於處理程序接收來自不信任源的數據,URL和其它參數值傳遞給應用程序可能包含的惡意數據企圖使用處理程序。所以,處理程序能夠首先啓動基於外部數據的空閒行爲確認這些行爲以及它們的用戶。命令行
三、示例htm
接下來的例子演示如何註冊alert.exe應用程序,來處理alert協議。
首先咱們能夠新建一個txt文件,寫入內容以下:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\alert]
@="URL:alert Protocol"
"URL Protocol"="C:\\Program Files\\Alert\\alert.exe"
[HKEY_CLASSES_ROOT\\alert\\DefaultIcon]
@="C:\Program Files\Alert\alert.exe"
[HKEY_CLASSES_ROOT\\alert\\shell]
@="open"
[HKEY_CLASSES_ROOT\\alert\\shell\\open]
@="open"
[HKEY_CLASSES_ROOT\\alert\shell\\open\\command]
@="\"C:\\Program Files\\Alert\\alert.exe\" \"%1\""
注意:a.路徑使用雙槓"\\";b.若是字符串中有雙引號("),那麼須要加轉義字符"\"
而後將文件名改成Alert.reg,雙擊本文件執行,將這些項寫入到註冊表。
增長這些設置信息到註冊表,嘗試導航到像「alert:Hello%20World」這樣的URLs中,將會嘗試啓動alert.exe程序而且在命令行中傳遞「Hello World」。
四、協議處理實例
下面的代碼包含了一個簡單的C#控制檯應用程序演示了一種實現alert協議處理程序的方式:
複製內容到剪貼板 程序代碼
using System;
using System.Collections.Generic;
using System.Text;
namespace Alert1
{
class Program
{
static string ProcessInput(string s)
{
// TODO Verify and validate the input
// string as appropriate for your application.
return s;
}
static void Main(string[] args)
{
Console.WriteLine("Alert.exe invoked with the following parameters.\r\n");
Console.WriteLine("Raw command-line: \n\t" + Environment.CommandLine);
Console.WriteLine("\n\nArguments:\n");
foreach (string s in args)
{
Console.WriteLine("\t" + ProcessInput(s));
}
Console.WriteLine("\nPress any key to continue...");
Console.ReadKey();
}
}
}
五、測試
a、打開記事本,輸入如下代碼,並保存爲test.html
<a href="alert://Hello!">點擊這裏啓動程序</a>
b、將test.html拖入瀏覽器中打開,本人在Google Chrome中測試的;
c、點擊頁面中的按鈕"點擊這裏啓動程序";
d、你發現剛纔寫的程序運行了,而且TextBox中顯示"alert://Hello!"。