构想一个场景,当咱们在浏览一个网页并且须要下载某个资源时,你的电脑可能常常会跳出一个提示框,询问你是否须要关上“迅雷”。当咱们点击“是”,则会唤醒该本地利用进行下载工作。
针对这个场景产生了一个疑难,网页是如何关上PC端利用的呢?
本文针对Windows零碎和MacOS零碎进行探讨。
自定义协定
在薄荷FE的日常开发中,因为须要与app频繁交互,app开发人员定义了相干协定:boohee://,通过该协定,咱们能够唤起薄荷app。
通过这个场景作者衍生出一个想法,PC端的利用是否也能够通过相似的协定被关上呢?
Windows
注册表
注册表是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。
它是Windows操作系统中的一个外围数据库,其中寄存着各种参数,能够间接管制一些Windows应用程序的运行。
在Windows环境中,咱们能够通过注册表来定义关上软件的协定。
如何查看注册表中的协定?
Windows零碎中自带了注册表编辑器,通过Windows+r关上运行,输出"regedit",关上注册表编辑器。
咱们须要的无关关上利用的注册表配置就存在HEY_CLASSES_ROOT下。
HEY_CLASSES_ROOT
HKEY_CLASSES_ROOT根键中次要蕴含的是所有启动应用程序须要的信息,其中包含:
- 所有扩展名及应用程序和文档之间的关联信息。
- 所有驱动程序的名字。
- 当作指针的字符串,指向它们代表的理论文件。
- 类标识CLSID,这点在拜访子健信息的时候十分重要,因为Windows中拜访了子健的信息都是用CLSID来代替的。这里的标识在Windows XP零碎中是惟一的。
- DDE和OLE信息。对于每个文件关联都能够应用DDE和OLE性能。
- 应用程序和文档应用的图标
示例: 关上postman
点击postman文件夹,能够看到右侧有个默认属性定义了URL:postman,导出该注册表能够看到如下配置:
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Classes\postman] "URL Protocol"="" @="URL:postman" [HKEY_CURRENT_USER\Software\Classes\postman\shell] [HKEY_CURRENT_USER\Software\Classes\postman\shell\open] [HKEY_CURRENT_USER\Software\Classes\postman\shell\open\command] @="\"C:\\Users\\X\\AppData\\Local\\Postman\\app-6.0.10\\Postman.exe\" \"%1\""
[HKEY_CURRENT_USER\Software\Classes\postman]中的postman就是协定的名字,该配置次要通过
[HKEY_CURRENT_USER\Software\Classes\postman\shell\open\command]中定义的地址来找到软件并启动。启动软件次要依赖以下两个配置:
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Classes\postman] "URL Protocol"="" @="URL:postman" [HKEY_CURRENT_USER\Software\Classes\postman\shell\open\command] @="\"C:\\Users\\X\\AppData\\Local\\Postman\\app-6.0.10\\Postman.exe\" \"%1\""
剖析一下上述的配置是什么意思:
- HKEY_CURRENT_USER\Software\Classes\postman: 定义了驱动函数的名字
- HKEY_CURRENT_USER\Software\Classes\postman\shell\open\command:定义了程序所在的门路
依据这两个配置,前端网页能够通过postman://协定来关上本地的postman利用。
成果展现:
MacOS
在MacOS中关上利用和在Ios中雷同,能够给本人的app增加URL Schemes。
Info.plist
每次新建一个我的项目工程,Xcode都会主动创立一个Info.plist文件,这个文件的次要作用就是提供利用在运行期的一些配置。
Info.plist文件位于应用程序的Contents/子目录下,这个文件保留了利用包的元数据信息。这个文件是必备的,操作系统通过这个文件断定依赖关系和其余属性。
CFBundleURLTypes:这个利用包关联的URL。这是一个字典,指定了这个包解决的URL schemes以及解决形式。
以Foxmail为例,这是该利用相干的配置:
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>mailto</string> <key>CFBundleURLSchemes</key> <array> <string>mailto</string> </array> </dict> </array>
其中定义了该利用包下定义的URL Schemes为mailto://。
如何查问app的URL Schemes
关上finder => 应用程序 => 右击利用并抉择显示包内容 => 抉择Contents文件夹下的Info.plist文件