终于搞懂了网盘网页是怎么唤醒本地应用了
写在前面
用百度网盘举例,可以通过页面打开本机的百度网盘软件,很多软件的网站页面都有这个功能。
本篇讲的是 Windows 的。
自定义协议
本身单凭浏览器是没有唤醒本地应用这个能力的,不然随便一个网页都能打开你的所有应用那不就乱套了吗。但是电脑系统本身可以通过配置自定义协议支持这个能力。
举个例子,当你用浏览器打开一个本地的 PDF 的时候,你会发现上面是 file://path/xxx.pdf,这就是系统内置的一个协议,浏览器可以调用这个协议进行文件读取。
那么与之类似的,windows 本身也支持用户自定义协议来进行一些操作的,而这个协议就在注册表中进行配置。
配置自定义协议
这里我用 VS Code 来举例子,最终我要实现通过浏览器打开我电脑上的 VS Code。
我们先编写一个注册表文件:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\vscode]
@="URL:VSCode Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\vscode\shell]
[HKEY_CLASSES_ROOT\vscode\shell\open]
[HKEY_CLASSES_ROOT\vscode\shell\open\command]
@=""D:\Installation\Microsoft VS Code\Code.exe" "%1""逐行解释下:
Windows Registry Editor Version 5.00这行表明该文件是一个 Windows 注册表编辑器文件,这是标准的头部,用于告诉 Windows 如何解析文件[HKEY_CLASSES_ROOT\vscode]这是一个注册表键的开始。在这里,\vscode表示创建一个名为vscode的新键@="URL:VSCode Protocol"在 vscode 键下,这行设置了默认值(表示为 @ ),通过 "URL:VSCode Protocol" 对这个键进行描述"URL Protocol"=""这行是设置一个名为 URL Protocol 的空字符串值。这是代表这个新键是一个 URI 协议[HKEY_CLASSES_ROOT\vscode\shell]创建一个名为 shell 的子键,这是一个固定键,代表 GUI 界面的处理[HKEY_CLASSES_ROOT\vscode\shell\open]在 shell 下创建一个名为 open 的子键。这耶是一个固定键,open 是一个标准动作,用来执行打开操作[HKEY_CLASSES_ROOT\vscode\shell\open\command]在 open 下创建一个名为 command 的子键。这是一个固定键,指定了当协议被触发时要执行命令@=""D:\Installation\Microsoft VS Code\Code.exe" "%1""在 command 键下,设置默认值为 VSCode 的路径。 "%1" 是一个占位符,用于表示传递给协议的任何参数,这里并无实际用处
写好了注册表文件后,我们将其保存为 vscode.reg,并双击执行,对话框选择是,相应的注册表信息就被创建出来了。
浏览器打开 VS Code
这时,我们打开浏览器,输入 vscode://open,浏览器弹出了询问对话框,然后就可以打开VS Code 了。
写在最后
自定义唤醒协议,在浏览器中输入对应的协议地址,就可以打开自定义的应用了。