背景

毫无疑问,面对一个新的项目需求,我们首先想到的就是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桌面化的技术方案中,目前主流的有以下两种:

  1. Electron:源于Github,是一个使用JavaScript, HTML和CSS等Web技术创建原生程序的框架,文档比较全面,社区也很活跃,发展到目前已经很成熟了;
  2. Cef系列:主要是CefSharp,是面向winForm或wpf环境下,对嵌入式Chromium框架的封装,通过C++/CLI的方式来调用CEF类库,目前的版本更新很频繁,优点是上手简单,跟Chrome的兼容非常好。

以上两种技术方案都有大量的使用者,一般的技术问题都能从搜索引擎找到答案。

尝试

我本人通过对CefSharp的简单封装,实现了一个叫 EDesk 的玩应,主要进度如下:

  1. 屏蔽右键菜单
  2. 自定义首页
  3. Form标题跟随Web标题自动更新
  4. 重写新窗口(target=_blank)
  5. 重写弹窗(alert/confirm)
  6. 快捷键:F5刷新页面
  7. 快捷键:Ctrl + F5强制刷新页面
  8. 快捷键:F11全屏/恢复
  9. 快捷键:F12打开控制台
  10. 自定义UserAgent:EDesk/1.0.0
  11. 增加JS对象注入:EDesk
  12. 增加JS对象自动绑定函数:EDeskReady
  13. 摄像头操作API

下一步计划实现身份证阅读器的操作API,便于在web中实现对身份证的读取、检测以及读取身份证照片的功能。

目前该项目已在gitee上开源,地址:https://gitee.com/itez/edesk

欢迎感兴趣的朋友一起交流。

关于web桌面应用的集成解决方案的更多相关文章

  1. 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)

    前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...

  2. Atitit 桌面软件跨平台gui解决方案 javafx webview

    Atitit 桌面软件跨平台gui解决方案 javafx webview 1.1. 双向js交互1 1.2. 新弹出窗口解决1 1.3. 3.文档对象入口dom解析1 1.4. 所以果断JavaFX, ...

  3. Jmeter+jenkins如何快速搭建接口和性能测试持续集成解决方案-[基于windows篇]

    最近在用Jmeter本来想写一个详细的使用教程,突然看到有前辈已经写好了不错的教程,特此"借花献佛"整理出来分享给大家! Jenkins + Jmeter 构建接口.性能测试持续集 ...

  4. 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)

    通过前面几节的准备工作,对于 npm / node / gulp 应该已经有了基本的认识,本节主要介绍如何构建一个基本的前端自动化开发环境. 下面将逐步构建一个可以自动编译 sass 文件.压缩 ja ...

  5. 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一)

    相关连接导航 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二) 常用 Gulp 插件汇总 ...

  6. 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二)

    前言 文章 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 中,已经完成对 gulp 的安装,由于是window环境,文中特意提到了可以通过安装 gitbash 来代替 ...

  7. 【转】外部应用和drools-wb6.1集成解决方案

    一.手把手教你集成外部应用和drools workbench6.1 1.         首先按照官方文档安装workbench ,我用的是最完整版的jbpm6-console的平台系统,里面既包含j ...

  8. web桌面程序之图标拖动排序的分析

    在web桌面程序里,图标拖动并重新排序是个比较常见的功能.这个功能我之前反复修改了好几遍,现在终于整理出了比较理想的解决思路,决定拿出来分享下. 这一功能主要有哪些难点呢?我总结了一下一共有2处难点: ...

  9. Selenium Web 自动化 - 项目持续集成(进阶)

    Selenium Web 自动化 - 项目持续集成(进阶) 2017-03-09 目录 1 背景及目标2 环境配置  2.1 SVN的安装及使用  2.2 新建Jenkins任务3 过程分析 1 背景 ...

随机推荐

  1. 深入理解HTTP请求流程

    以前写过一篇博客,叫做HTTP的报文分析:https://blog.csdn.net/ZripenYe/article/details/119593269但是感觉还是不太深入.不够全面,顶多了解个大概 ...

  2. SQL注入之MySQL报错注入整理

    看大佬们的文章看得我虎躯一震,精神抖擞,于是心血来潮,整理一下MySQL报错注入常见的手段和方法,再举几个例子 <代码审计:企业级Web代码安全架构>一书中介绍过报错注入十大方法,依次是: ...

  3. nacos config基本使用

    说明 Nacos is an easy-to-use dynamic service discovery, configuration and service management platform ...

  4. VMware 启动虚拟机黑屏(Ubuntu)

    之前启动都很正常,不知道为啥,最近启动,老出现这种黑屏得情况: 解决方法: 在搜索栏里搜索cmd 巴拉了一下谷歌,发现了问题: 虚拟机和主机之间的通信,基本上是以 socket 的方式进行通信的(这里 ...

  5. SQL server多表联合查询

    参考网址: https://blog.csdn.net/zou15093087438/article/details/79226394 1. 外连接可分为:左连接.右连接.完全外连接. a.  左连接 ...

  6. UWP App Data存储和获取

    这篇博客介绍如何在UWP开发时,如何存储App Data和获取. App Data是指用户的一些设定,偏好等.例如,App的主题,是否接收推送,离线接收消息等.需要区分下App Data和User D ...

  7. asp.net core 知识点总结

  8. 优先队列PriorityQueue&Lambda&Comparator

    今天翻阅<Labuladuo的算法小抄>时发现在使用优先队列的PriorityQueue解决一道hard题时(leetCode 23),出现了如下代码: ListNode mergeKLi ...

  9. 前端调用后台接口下载word文档的两种方法

    1传统的ajax虽然能提交到后台,但是返回的数据被解析成json,html,text等字符串,无法响应浏览器下载.就算使用bob模拟下载,数据量大时也不方便 废话不多说:上代码(此处是Layui监听提 ...

  10. Windows10下MySQL的安装

    简单介绍一下MySQL的安装 官方网址:https://www.mysql.com/downloads/ 1.找到MySQL Community Edition (GPL) (注:GPL版本为开源,非 ...