我們在qq網站上有的地方可以點擊一個按鈕,會啟動本地的qq客戶端,在下載文件時,有時候點擊一個鏈接會啟動迅雷下載客戶端。這些是如何實現的?如何按照自己的需求啟動自定義的應用程序?
URI
統一資源標識符(Uniform Resource Identifier,URI)是一個用於標識某一互聯網資源名稱的字符串。 該種標識允許用戶對任何(包括本地和互聯網)的資源通過特定的協議進行交互操作。URI由包括確定語法和相關協議的方案所定義(詳細信息可以參考百度百科URI)
URL的格式由下列三部分組成:,第一部分是協議(或稱為服務方式,包括http,ftp,https等);第二部分是存有該資源的主機IP地址(有時也包括端口號);第三部分是主機資源的具體地址。
具體URI的格式如下:
[協議名]😕/[用戶名]:[密碼]@[服務器地址]:[服務器端口號]/[路徑]?[查詢字符串]#[片段ID]
瀏覽器對URI的解析
我們從瀏覽器中輸入一個URI地址,此時瀏覽器首先解析該uri地址對應的協議信息,對於http、https、ws、ftp等協議,由於瀏覽器自身就能夠進行處理,因此,瀏覽器直接進行后續的相關處理工作,當URI協議瀏覽器自身無法進行處理時(例如:Tencent),瀏覽器會將URI中的協議信息提取出來,然后從操作系統查找可以處理該協議的對應的應用程序,然后將后續的操作全部轉發給找到的應用程序進行處理,如果沒有找到,則對該資源處理失敗。
瀏覽器是如何知道某一協議的處理程序的呢?window操作系統下,是通過查找注冊表中的信息來獲取的。
添加自定義的URI處理程序
編寫一個reg文件,參考編寫.reg注冊表文件,然后運行編寫的reg文件,此時,就可以像Tencent一樣在網頁端啟動對應的客戶端了。需要注意的是,設置command的值時,可以添加%1 表示的是接收的參數
Tencent的完成的注冊表信息:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Tencent]
@="TencentProtocol"
"URL Protocol"="C:\\Program Files (x86)\\Tencent\\QQ\\Bin\\Timwp.exe"
[HKEY_CLASSES_ROOT\Tencent\DefaultIcon]
@="C:\\Program Files (x86)\\Tencent\\QQ\\Bin\\Timwp.exe,1"
[HKEY_CLASSES_ROOT\Tencent\shell]
[HKEY_CLASSES_ROOT\Tencent\shell\open]
[HKEY_CLASSES_ROOT\Tencent\shell\open\command]
@="\"C:\\Program Files (x86)\\Tencent\\QQ\\Bin\\Timwp.exe\" \"%1\""
