前言
chromium团队去年在技术博客中写道,今年六月将停止对浏览器插件的支持。尽管现代的浏览器已经有了不错的原生能力,但是针对需要特定原生能力的部分应用(如需要严格鉴权、接口隐藏、双向ssl,跨域问题),还是需要考虑借助于其他方法来实现。
Chromium Blog: Moving Forward from Chrome Apps
- June 2021: End support for NaCl, PNaCl, and PPAPI APIs.
两类调用宿主能力的方法
自定义scheme
在浏览器中直接通过uri打开应用,如telegram加群和加好友功能、迅雷下载文件等(可以直接复制到url输入框中查看效果)
telegram: tg://resolve?domain=xxxxxx
迅雷: thunder://xxxxxx
这一类属于单向数据传递,由浏览器调起本地软件后没有后续的直接反馈能力。一般是在安装软件时向系统注册特殊的协议scheme,在浏览器(其他软件如:email也有次功能)中访问对应scheme加上参数,经过用户确认授权后,就可以向宿主客户端传递数据。
具体如何定义各个平台的Scheme请查看相关文档,以下是一些相关相关链接,不确定可用。
存在的问题
- 数据由浏览器传向客户端后,缺少反馈能力。
- 通过url传递参数有着url上的限制。
- 需要用户确认授权。
客户端软件开启本地服务监听请求
首先用户需要安装客户端软件,在软件内部开启一个http服务监听本地端口,浏览器再通过接口和本地服务进行交互,获取原生能力,如postman网页版、网页使用qq自动登录功能
为了使整个网页api请求url表现统一,一般使用自有二级域名,将域名解析到127.0.0.1即可。如:
localhost.yourdomain.com 127.0.0.1
同时启动服务需要多考虑几个备用端口,备用端口号尽量有一定随机性(如:8376, 9291, 3425等),浏览器可以遍历一下监听端口,寻找可用服务,避免端口号被其他应用占用。
存在的问题:
- 本地http服务,寻找端口问题,防止某一段端口被占用。
- 浏览器原生能力逐渐强大,这种方式适用范围有限。