设想一个场景,当我们在浏览一个网页并且需要下载某个资源时,你的电脑可能经常会跳出一个提示框,询问你是否需要打开“迅雷”。当我们点击“是”,则会唤醒该本地应用进行下载任务。

针对这个场景产生了一个疑问,网页是如何打开PC端应用的呢?

本文针对Windows系统和MacOS系统进行讨论。

自定义协议

在薄荷FE的日常开发中,因为需要与app频繁交互,app开发人员定义了相关协议:boohee://,通过该协议,我们可以唤起薄荷app。

通过这个场景作者衍生出一个想法,PC端的应用是否也可以通过类似的协议被打开呢?


Windows

注册表

注册表是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。

它是Windows操作系统中的一个核心数据库,其中存放着各种参数,可以直接控制一些Windows应用程序的运行。

在Windows环境中,我们可以通过注册表来定义打开软件的协议。

如何查看注册表中的协议?

Windows系统中自带了注册表编辑器,通过Windows+r打开运行,输入"regedit",打开注册表编辑器。

image.png

我们需要的有关打开应用的注册表配置就存在HEY_CLASSES_ROOT下。

HEY_CLASSES_ROOT

HKEY_CLASSES_ROOT根键中主要包含的是所有启动应用程序需要的信息,其中包括:

  1. 所有扩展名及应用程序和文档之间的关联信息。
  2. 所有驱动程序的名字。
  3. 当作指针的字符串,指向它们代表的实际文件。
  4. 类标识CLSID,这点在访问子健信息的时候非常重要,因为Windows中访问了子健的信息都是用CLSID来代替的。这里的标识在Windows XP系统中是唯一的。
  5. DDE和OLE信息。对于每个文件关联都可以使用DDE和OLE功能。
  6. 应用程序和文档使用的图标
示例: 打开postman

image.png

image.png

点击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文件

image.png
image.png
image.png


UlaHalal
29 声望0 粉丝

主要用于笔记整理