(Mac版)终于搞懂了浏览器是怎么唤醒本地应用了

admin 2024年1月10日09:53:01评论34 views字数 1616阅读5分23秒阅读模式

写在前面

之前写了一篇Windows版的 终于搞懂了网盘网页是怎么唤醒本地应用了的文章

发表后,在掘金直接窜上了综合热榜第一,这是令我没想到的。

(Mac版)终于搞懂了浏览器是怎么唤醒本地应用了

然后有些朋友就问了,好奇Mac上应该怎么配置自定义协议来通过浏览器唤醒本地应用。这篇文章我就简单记录一下。

Mac的自定义协议

不像Windows在注册表中配置,每个Mac应用都会有一个Info.plist的配置文件,这里还用VS Code来举例子

/Applications/Visual Studio Code.app/Content/Info.plist

(Mac版)终于搞懂了浏览器是怎么唤醒本地应用了

这个文件是每个app都会包含的,而自定义打开协议就在这里配置。

(Mac版)终于搞懂了浏览器是怎么唤醒本地应用了

<array>        <dict>                <key>CFBundleTypeRole</key>                <string>Viewer</string>                <key>CFBundleURLName</key>                <string>Visual Studio Code</string>                <key>CFBundleURLSchemes</key>                <array>                        <string>vscode</string>                </array>        </dict></array>

这里大家应该都能看懂,是一个数组里套了个字典。通过配置CFBundleURLSchemes这个key,值为vscode就代表了定义了一个vscode的协议。几乎每个应用都会有自己的伪协议。

注:这里纠正一个之前文章的小错误,windows中,基本上每个应用程序安装后都已经注册好了自定义协议。所以在之前windows的文章演示中那个vscode协议早就存在了,我的注册表操作只是把它重写了,在这里纠正一下。

但是仅仅写到这里就可以了吗,肯定不行的。需要执行一下app,在每个app第一次执行的时候,Mac系统都会自己先过一遍整个应用,然后自动把配置添加到系统中,这个是不需要用户去完成的。

所以当你点击运行一次之后,这个协议就被识别然后添加到了系统自定义协议中了。

(Mac版)终于搞懂了浏览器是怎么唤醒本地应用了

配置自定义协议

自己搞一个mac app成本较大(本人也不会)。这里为了方便演示,我用如下流程:

在应用文件夹中复制一份VScode,更名为vs.app,然后重写自定义协议为vs,来用浏览器唤醒。

cp -r Visual Studio Code.app vs.app

然后进入vs.app的Contents

(Mac版)终于搞懂了浏览器是怎么唤醒本地应用了

编辑Info.plist

<array>        <dict>                <key>CFBundleTypeRole</key>                <string>Viewer</string>                <key>CFBundleURLName</key>                <string>Visual Studio Code</string>                <key>CFBundleURLSchemes</key>                <array>                        <string>vs</string>                </array>        </dict></array>

修改string值为 vs,保存。

然后在应用程序中,打开

(Mac版)终于搞懂了浏览器是怎么唤醒本地应用了

(Mac版)终于搞懂了浏览器是怎么唤醒本地应用了

这个是正常的,损坏了。我这里只是为了演示配置一个vs伪协议,运行一次的原因是为了让系统识别一次,把自定义的vs协议注册到系统中。

随后,我们打开浏览器输入 vs://

(Mac版)终于搞懂了浏览器是怎么唤醒本地应用了

(Mac版)终于搞懂了浏览器是怎么唤醒本地应用了

点击打开后确认是咱们新添加的这个损坏的程序。

查询Mac中的自定义协议

这里我再多说一下怎么查询Mac中的自定义协议,系统中有一个LaunchServices的概念,是负责应用程序的注册启动等相关的内容的。

所以可以通过如下命令来去获取自定义协议信息

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump | grep -i "bindings:.*:"

(Mac版)终于搞懂了浏览器是怎么唤醒本地应用了

可以列出当前所有的支持协议

(Mac版)终于搞懂了浏览器是怎么唤醒本地应用了

刚刚的vs也赫然在列。

END

原文始发于微信公众号(飞羽技术工坊):(Mac版)终于搞懂了浏览器是怎么唤醒本地应用了

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月10日09:53:01
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   (Mac版)终于搞懂了浏览器是怎么唤醒本地应用了https://cn-sec.com/archives/2380247.html

发表评论

匿名网友 填写信息