背景

毫无疑问,面对一个新的项目需求,我们首先想到的就是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. STM32—4线SPI驱动SSD1306 OLED

    文章目录 一.OLED简介 二.驱动SSD1306所需知识 1.引脚介绍 2.通信时序 3.显存GRAM 4.字库 5.SSD1306基本命令 三.代码讲解 1.相关引脚配置 2.模拟SPI通信 3. ...

  2. 单片机学习(八)点阵LED的使用

    目录 一.点阵LED的理论知识 1. 点阵屏的打开方式 2. LED点阵简介 3. 点阵LED的结构和操作方式 4. 74HC595模块 PPT上的简介 串行转并行的工作原理 二.编码实现 1. C5 ...

  3. 如果被问到 HTTP 协议,你真的能讲清楚吗?

    前段时间,在和许久未见的老同学聊天时,突然被问到 http 协议到底是什么?脑海里面第一时间想起来的就是 request 请求.response 响应之类的词汇,但是这样讲他真的能知道是什么吗?我反问 ...

  4. Semaphore 的使用

    var workerSemphore = new Semaphore(0, 800000); var IsWorkThreadCreated = true; var workThread = new ...

  5. 动态数据库PI、edna insql、infoplus简单了解

    一.动态数据库概念 动态数据库(DDL)是做为共享函数库的可执行文件.动态数据库提供了一种方法,使进程可以调用不属于其可执行代码的函数.说白了就是一个.dll可执行文件,其中有可执行代码,进程可以调用 ...

  6. [C#]c#中数据的同步加锁机制 的几种方法

    一,锁定机制最简单的做法就是使用锁定关键字Lock.Lock关键字英文中就是锁的意思,顾名思义就是为操作加上一把锁.它的语法如下: lock(lockObj){//加锁的代码段,一般是操作共同资源的代 ...

  7. 关于windows下 python3安装 cython的说明

    针对python3.6希望在windows环境下安装cython,但是网上任何关于mingw的尝试都没有生效.所以只能下载 vs, 1.去官网https://visualstudio.microsof ...

  8. 多线程编程<四>

    1 /** 2 * 守护线程daemon['diːmən] 3 * @author Administrator 4 * 5 */ 6 public class DaemonDemo { 7 publi ...

  9. WIN7下安装Python3.7和labelImg-1.7.0

    安装python3.7 官方https://www.python.org/downloads/windows/,下载windows 64bit python3.7版本 用Administrator权限 ...

  10. NX二次开发-使用NXOPEN C++向导模板做二次开发

    版本 NX9+VS2012 1.怎么往VS软件里添加VC,C#,VB向导模板 先到NX安装目录下UGOPEN文件夹里找到这三个文件夹 拷贝到VS的安装目录下 这里有几个注意事项,VS2017,VS20 ...