Web环境如何与宿主系统交互

485 阅读2分钟

前言

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服务,寻找端口问题,防止某一段端口被占用。
  • 浏览器原生能力逐渐强大,这种方式适用范围有限。