在浏览器中通过a标签打开本地的应用程序

我们在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\""

posted @ 2019-09-17 16:21  zhao379028604  阅读(3001)  评论(0编辑  收藏  举报