EPWA ,  是  Easy PWA  的 意思,

PWA 取自于 Google 的 PWA,

EPWA   是一个用   C#  Cef  Html  js  css   开发 桌面程序 的 架构 和 示例 。

可以参考 《我发起了一个 ILBC 的 子项目 ILBC Studio》   https://www.cnblogs.com/KSongKing/p/10465609.html   ,

以及  《用 EPWA 写一个 图片播放器 PicturePlayer》    https://www.cnblogs.com/KSongKing/p/10779523.html   ,

ILBC Studio 就是用 EPWA 的 架构 写的 。

ILBC Studio 中 使用的 js 库 是 jWebForm ,  见 《我发起并创立了一个 Javascript 前端库 开源项目 jWebForm》 https://www.cnblogs.com/KSongKing/p/10326119.html  。

ILBC Studio 项目地址 :      https://github.com/kelin-xycs/ILBC

Bin 下载地址 :        http://ilbc.kgeking.kooboo.site/ILBCStudio_Debug.zip

EPWA  可以将  Html Js  Css  编译为 程序集资源,  通过  “localapp/Htmls/Main.html”   格式 的 Url 访问,  “localapp” 作为 host 表示 从 程序集资源 中 读取 Url 资源,

对 安全 有 比较严格 要求 的 场合, 可以给 程序集 加上 强名称, 这样 程序集(包含 资源)  就可以 加密 了 。

还可以 通过  “localfile\C\Project\Htmls\Main.html”   的 Url 格式 访问 本地文件,  这样可以直接 打开 Html 文件 测试调试, 可以不用编译, 很方便 。

之所以采用  “localfile”  的 方式  而不是 直接的 文件路径,  是因为 Chrome 默认不允许 本地文件 跨 frame 访问, 用 “localfile” 方式 可以避免这个问题 。

jWebForm 里 对于 多窗口(MDI) 模块化 开发 是 以 iframe 作为 模块,  不允许 跨 frame 访问 就 会有问题 。

“localapp” 和 “localfile”  的 实现原理 是 在 Cef 里 自定义 了 一个 RequestHandler 和 ResourceHandler,

ResourceHandler 里判断 Url 的 host 是否 是 “localapp” 或 “localfile” ,  如果是 则 从 程序集资源 或 本地文件 中 读取 。

RequestHandler 和 ResourceHandler  都在  CefGlue.WindowsForms 项目 的   RequestHandler.cs   文件 里 。

如果还想做出 “360风格” 窗口,  或者 对 窗口 的 标题栏 边框 自己定制,  那么还可以 结合 WinFormEx,

有关  WinFormEx ,  见  《WinFormEx》       https://www.cnblogs.com/KSongKing/p/9455273.html      。

记录 Cef 的 一些 Issue:

1    Cef 现在有个 Bug ,就是超链接的 target = "_blank" 的话,点击链接弹出窗口打开网页后,再关闭网页窗口, 然后整个程序就再也打不开各种窗口了,包括 Dev Tools, 点击“保存”菜单时弹出的 FileDialog, 对话框(MessageBox.Show())。 本来到 GitLab 上去提个 Issue,又注册不了账号,说是“There was an error with the reCAPTCHA. Please solve the reCAPTCHA again.”, 当然如果是在 浏览器 而不是 Cef 里查看这个网页的话,就没有这个问题,但是上面提到为了避免 Chrome 默认不允许 本地文件 跨 frame 访问的问题, 有一种方法是把这个网页放到 EPWA(Cef)里查看,所以把这个问题记录下来。另外就是这个问题是一个 Issue ,先记录在这里,等之后再到 GitLab 上提, 这个问题不解决,影响 Cef 正常使用。

2    遗留进程 的 问题,或者说 进程不能完全退出的问题, 比如, 打开了 Dev Tools, 在不关闭 Dev Tools 的 情况 下, 直接关闭 主窗口, 会导致有 2 个 后台进程 遗留 而 不退出 。 另外, 如果有 MessageBox.Show() 弹出了对话框 的 话, 好像也会产生这种问题 。

我发起并创立了一个 EPWA 的 开源项目的更多相关文章

  1. 我发起并创立了一个 Javascript 前端库 开源项目 jWebForm

    在线演示地址: ( 在线演示 云平台 由 Kooboo 提供  https://www.kooboo.com/ ) 按钮:      http://iwebform.kgeking.kooboo.si ...

  2. 我发起了一个 用 javascript 写一个 Office 的 开源项目 JS Office

    用   js  写   Office,  说实在的,  把 现在已有的 各种 富文本编辑器 和 电子表格 js 库 收集起来 整合一下 就 差不多了 , 放到 前几天 那个 “  js 作为 一等公民 ...

  3. 我发起并创立了一个 C 语言编译器 开源项目 InnerC

    本文是 VMBC / D#  项目 的 系列文章, 有关 VMBC / D# ,  见 <我发起并创立了一个 VMBC 的 子项目 D#>(以下简称 <D#>)  https: ...

  4. 我发起并创立了一个 VMBC 的 子项目 D#

    大家好, 我发起并创立了一个 VMBC 的 子项目 D#  . 有关 VMBC ,  请参考 <我发起了一个 用 C 语言 作为 中间语言 的 编译器 项目 VMBC>     https ...

  5. 5 天 4000 star 的一个爆款开源项目

    今天早上起来浏览 GitHub 的时候,在周热门趋势排行榜上看到了这么一个开源项目,仅仅 5 天时间,爬到了周排行榜的第一名的位置.而在每天的排行榜上,今天一早也高高位居排行榜的第二位. 这个开源项目 ...

  6. 我发起并创立了一个 .Net 平台上的 Web 业务系统 基础库 开源项目 WebEasy

    我 强调一点, 程序员 应该对 程序 有 控制感 . 过多的 控制反转 使 程序员 丧失了 对 程序 的 控制感 . 过多的 依赖注入 束缚了 程序员 的 创造力 . 过度复杂的 架构设计 束缚了 程 ...

  7. 发现一个好的开源项目:lomoX(挑着看,每天看一点,看一年就ok了)——用Webkit开发桌面软件,炫

    http://www.oschina.net/p/lomox https://github.com/caidongyun/lomox 用Web技术做桌面客户端.虽然仍然免不了要分发客户端,但好处是,界 ...

  8. 利用git向github上远程提交一个自己的开源项目

    1.在电脑的系统变量中的path路径中配置git的环境变量: 找到git安装路径中bin的位置,如:X:\Git\bin 找到git安装路径中git-core的位置,如:X:\Git\libexec\ ...

  9. 我发起了一个 支持 ServerFul 架构 的 .Net 开源项目 ServerFulManager

    大家好,  我发起了一个 支持 ServerFul 架构 的 .Net 开源项目 ServerFulManager . ServerFulManager 的 目标 是 实现一个 支持 ServerFu ...

随机推荐

  1. Java NIO学习之Buffer

    Bufer的capacity,position和limit: capacity: 表示buffer的容量. position: 写数据到Buffer中时: 表示当前的位置.初始的position值为0 ...

  2. 区间dp之四边形不等式优化详解及证明

    看了那么久的四边形不等式优化的原理,今天终于要写一篇关于它的证明了. 在平时的做题中,我们会遇到这样的区间dp问题 它的状态转移方程形式一般为dp[i][j]=min(dp[i][k]+dp[k+1] ...

  3. Vue对Html标签应用条件渲染

    我的需求 在flag属性为true时 渲染标签的html为 <input :data-val-required="不能为空"/> 在flag属性为false时 渲染标签 ...

  4. Selenium常用API详解介绍

    转至元数据结尾   由 黄从建创建, 最后修改于一月 21, 2019 转至元数据起始   一.selenium元素定位 1.selenium定位方法 2.定位方法的用法 二.控制浏览器操作 1.控制 ...

  5. Groovy学习笔记-实现接口

    1.单个委托方法的实现 button.addActionListener( { println 'Implement ActionListener' } as ActionListener ) 2.实 ...

  6. 北大poj- 1034

    The dog task Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3272   Accepted: 1313   Sp ...

  7. HTML表格布局

    1         浏览器:接受浏览者的操作,然后帮浏览者去web服务器请求网页内容,然后展现成人人眼能够看得懂的可视化页面的软件. 2         IE是浏览器的一种.<ietest工具& ...

  8. Linux命令rz

    rz :上传文件:sz: 下载文件: 在linux 系统中,使用rz(或 sz) 命令是,提示 -bash: rz(或者是sz): command not found .这个时候,说明没有安装 lrz ...

  9. sourcetree 修改文件后提交上去,文件丢失

    提交sourcetree 修改后,图片资源提交上去了,json文件没提交上去,原因是本地finder隐藏文件.gitignore_global中把一些文件类型都隐藏了不让提交. 具体使用default ...

  10. Python中常见的序列及其函数

    分片:分片操作的实现需要提供两个索引作为边界,第一个包含在分片内,第二个不包含 number =[1,2,3,4,5,6,7,8,9,10] number [3:6]  -->[4,5,6] n ...