关于web桌面应用的集成解决方案
背景
毫无疑问,面对一个新的项目需求,我们首先想到的就是web。
确实,web太方便了,基于浏览器对OS的适配,我们可以很快速的实现某个需求的页面UI,而无需考虑OS的兼容差异。
再经过jq、bootstrap、vue等框架(库)的加持,web简直太酷了!
但浏览器(主要是V8)在成全web起飞的同时,由于安全沙箱的先天限制,web应用只能在浏览器的授信范畴内活动,而无法与OS直接通信。
当需要web应用访问本地的摄像头、读卡器、扫码枪、打印机等智能硬件时,总是会显得无能为力。
因此,在开发超市收银、业务大厅、IC卡管理等系统时,我们还是需要传统桌面应用与OS直接通信的那种能力。
模式
按照我们的习惯,还是在web中实现主要的页面UI及业务逻辑,而在需要与OS通信的部分,可以借助于桌面应用来跟OS的API打交道,并将最终结果返回给web。
这样一来,就可以打破浏览器安全沙箱的限制,将web的能力无限延申从而达到与本地OS相互通信的目的。
方案
在上面的图片中,web页面是借助桌面应用来与操作系统进行通信。
我们知道桌面应用和操作系统之间的通信是很简单的,不管是C++、C#或者JAVA都拥有这个能力,主要问题还是web与桌面应用之间的通信方式。
在远古时代,常用的办法有ActiveX、Java Applet和Flash等方式,主要是在web页面中嵌入dll或swf插件,通过这些插件来实现web本身无法做到的事情。
遗憾的是在现代浏览器中,这几种方式都逐渐不被支持,尤其从Chrome45版本以后,原来的NPAPI方式已被淘汰,新的PPAPI方式需要一定的门槛,对普通的web开发人员来说难度不小。
所以,就有很多人想到了另外一种方式,编写一个桌面应用,并在其中添加一个webview控件,就可以模拟成一个简化版的浏览器环境,然后通过js来实现双方的通信。
这种方式实现起来很方便,各种开发语言中都有webview控件,同时还实现了web应用的桌面驻留,使它看起来更像一个桌面应用。
选型
实现web桌面化的技术方案中,目前主流的有以下两种:
- Electron:源于Github,是一个使用JavaScript, HTML和CSS等Web技术创建原生程序的框架,文档比较全面,社区也很活跃,发展到目前已经很成熟了;
- Cef系列:主要是CefSharp,是面向winForm或wpf环境下,对嵌入式Chromium框架的封装,通过C++/CLI的方式来调用CEF类库,目前的版本更新很频繁,优点是上手简单,跟Chrome的兼容非常好。
以上两种技术方案都有大量的使用者,一般的技术问题都能从搜索引擎找到答案。
尝试
我本人通过对CefSharp的简单封装,实现了一个叫 EDesk 的玩应,主要进度如下:
- 屏蔽右键菜单
- 自定义首页
- Form标题跟随Web标题自动更新
- 重写新窗口(target=_blank)
- 重写弹窗(alert/confirm)
- 快捷键:F5刷新页面
- 快捷键:Ctrl + F5强制刷新页面
- 快捷键:F11全屏/恢复
- 快捷键:F12打开控制台
- 自定义UserAgent:EDesk/1.0.0
- 增加JS对象注入:EDesk
- 增加JS对象自动绑定函数:EDeskReady
- 摄像头操作API
下一步计划实现身份证阅读器的操作API,便于在web中实现对身份证的读取、检测以及读取身份证照片的功能。
目前该项目已在gitee上开源,地址:https://gitee.com/itez/edesk
欢迎感兴趣的朋友一起交流。
关于web桌面应用的集成解决方案的更多相关文章
- 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)
前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...
- Atitit 桌面软件跨平台gui解决方案 javafx webview
Atitit 桌面软件跨平台gui解决方案 javafx webview 1.1. 双向js交互1 1.2. 新弹出窗口解决1 1.3. 3.文档对象入口dom解析1 1.4. 所以果断JavaFX, ...
- Jmeter+jenkins如何快速搭建接口和性能测试持续集成解决方案-[基于windows篇]
最近在用Jmeter本来想写一个详细的使用教程,突然看到有前辈已经写好了不错的教程,特此"借花献佛"整理出来分享给大家! Jenkins + Jmeter 构建接口.性能测试持续集 ...
- 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)
通过前面几节的准备工作,对于 npm / node / gulp 应该已经有了基本的认识,本节主要介绍如何构建一个基本的前端自动化开发环境. 下面将逐步构建一个可以自动编译 sass 文件.压缩 ja ...
- 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一)
相关连接导航 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二) 常用 Gulp 插件汇总 ...
- 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二)
前言 文章 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 中,已经完成对 gulp 的安装,由于是window环境,文中特意提到了可以通过安装 gitbash 来代替 ...
- 【转】外部应用和drools-wb6.1集成解决方案
一.手把手教你集成外部应用和drools workbench6.1 1. 首先按照官方文档安装workbench ,我用的是最完整版的jbpm6-console的平台系统,里面既包含j ...
- web桌面程序之图标拖动排序的分析
在web桌面程序里,图标拖动并重新排序是个比较常见的功能.这个功能我之前反复修改了好几遍,现在终于整理出了比较理想的解决思路,决定拿出来分享下. 这一功能主要有哪些难点呢?我总结了一下一共有2处难点: ...
- Selenium Web 自动化 - 项目持续集成(进阶)
Selenium Web 自动化 - 项目持续集成(进阶) 2017-03-09 目录 1 背景及目标2 环境配置 2.1 SVN的安装及使用 2.2 新建Jenkins任务3 过程分析 1 背景 ...
随机推荐
- 深入理解HTTP请求流程
以前写过一篇博客,叫做HTTP的报文分析:https://blog.csdn.net/ZripenYe/article/details/119593269但是感觉还是不太深入.不够全面,顶多了解个大概 ...
- SQL注入之MySQL报错注入整理
看大佬们的文章看得我虎躯一震,精神抖擞,于是心血来潮,整理一下MySQL报错注入常见的手段和方法,再举几个例子 <代码审计:企业级Web代码安全架构>一书中介绍过报错注入十大方法,依次是: ...
- nacos config基本使用
说明 Nacos is an easy-to-use dynamic service discovery, configuration and service management platform ...
- VMware 启动虚拟机黑屏(Ubuntu)
之前启动都很正常,不知道为啥,最近启动,老出现这种黑屏得情况: 解决方法: 在搜索栏里搜索cmd 巴拉了一下谷歌,发现了问题: 虚拟机和主机之间的通信,基本上是以 socket 的方式进行通信的(这里 ...
- SQL server多表联合查询
参考网址: https://blog.csdn.net/zou15093087438/article/details/79226394 1. 外连接可分为:左连接.右连接.完全外连接. a. 左连接 ...
- UWP App Data存储和获取
这篇博客介绍如何在UWP开发时,如何存储App Data和获取. App Data是指用户的一些设定,偏好等.例如,App的主题,是否接收推送,离线接收消息等.需要区分下App Data和User D ...
- asp.net core 知识点总结
- 优先队列PriorityQueue&Lambda&Comparator
今天翻阅<Labuladuo的算法小抄>时发现在使用优先队列的PriorityQueue解决一道hard题时(leetCode 23),出现了如下代码: ListNode mergeKLi ...
- 前端调用后台接口下载word文档的两种方法
1传统的ajax虽然能提交到后台,但是返回的数据被解析成json,html,text等字符串,无法响应浏览器下载.就算使用bob模拟下载,数据量大时也不方便 废话不多说:上代码(此处是Layui监听提 ...
- Windows10下MySQL的安装
简单介绍一下MySQL的安装 官方网址:https://www.mysql.com/downloads/ 1.找到MySQL Community Edition (GPL) (注:GPL版本为开源,非 ...