我发起并创立了一个 EPWA 的 开源项目
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 的 开源项目的更多相关文章
- 我发起并创立了一个 Javascript 前端库 开源项目 jWebForm
在线演示地址: ( 在线演示 云平台 由 Kooboo 提供 https://www.kooboo.com/ ) 按钮: http://iwebform.kgeking.kooboo.si ...
- 我发起了一个 用 javascript 写一个 Office 的 开源项目 JS Office
用 js 写 Office, 说实在的, 把 现在已有的 各种 富文本编辑器 和 电子表格 js 库 收集起来 整合一下 就 差不多了 , 放到 前几天 那个 “ js 作为 一等公民 ...
- 我发起并创立了一个 C 语言编译器 开源项目 InnerC
本文是 VMBC / D# 项目 的 系列文章, 有关 VMBC / D# , 见 <我发起并创立了一个 VMBC 的 子项目 D#>(以下简称 <D#>) https: ...
- 我发起并创立了一个 VMBC 的 子项目 D#
大家好, 我发起并创立了一个 VMBC 的 子项目 D# . 有关 VMBC , 请参考 <我发起了一个 用 C 语言 作为 中间语言 的 编译器 项目 VMBC> https ...
- 5 天 4000 star 的一个爆款开源项目
今天早上起来浏览 GitHub 的时候,在周热门趋势排行榜上看到了这么一个开源项目,仅仅 5 天时间,爬到了周排行榜的第一名的位置.而在每天的排行榜上,今天一早也高高位居排行榜的第二位. 这个开源项目 ...
- 我发起并创立了一个 .Net 平台上的 Web 业务系统 基础库 开源项目 WebEasy
我 强调一点, 程序员 应该对 程序 有 控制感 . 过多的 控制反转 使 程序员 丧失了 对 程序 的 控制感 . 过多的 依赖注入 束缚了 程序员 的 创造力 . 过度复杂的 架构设计 束缚了 程 ...
- 发现一个好的开源项目:lomoX(挑着看,每天看一点,看一年就ok了)——用Webkit开发桌面软件,炫
http://www.oschina.net/p/lomox https://github.com/caidongyun/lomox 用Web技术做桌面客户端.虽然仍然免不了要分发客户端,但好处是,界 ...
- 利用git向github上远程提交一个自己的开源项目
1.在电脑的系统变量中的path路径中配置git的环境变量: 找到git安装路径中bin的位置,如:X:\Git\bin 找到git安装路径中git-core的位置,如:X:\Git\libexec\ ...
- 我发起了一个 支持 ServerFul 架构 的 .Net 开源项目 ServerFulManager
大家好, 我发起了一个 支持 ServerFul 架构 的 .Net 开源项目 ServerFulManager . ServerFulManager 的 目标 是 实现一个 支持 ServerFu ...
随机推荐
- Java虚拟机学习-对象的创建
虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载.解析和初始化过.如果没有,必须先执行相应类的加载过程. 类加载 ...
- 独家!DevExpress VCL Controls 2019发展路线图(No.1)
[DevExpress VCL Controls下载] 根据调查结果和反馈,DevExpress官方团队最终确定了DevExpress VCL Controls 2019年的路线图. 关于调查结果的重 ...
- 策略模式(Strategy Model)
定义:一个类的行为或算法能在运行时被改变,将一组算法封装成一系列对象,通过这些对象灵活改变系统功能: 实现方式: 首先定义个strategy接口,然后创建一系列对象(strategy objects) ...
- tcp的粘包现象与解决方案
粘包现象: 粘包1:连续的小包,会被优化机制给合并 粘包2:服务端一次性无法完全就收完客户端发送的数据,第二再次接收的时候,会接收到第一次遗留的内容 模拟一个粘包现象 服务端 import socke ...
- Linux:Debian系统的安装
这期就安装与Ubantu.Linux Mint差不多的系统,但是这个Debian系统的话,它安装时却有些不一样,什么不一样,我们接下来看看吧! 安装Debian系统 系统下载 Debian 9.5下载 ...
- 来自C++之父的建议
You don’t have to know every detail of C++ to write good programs; Focus on programming techniques, ...
- javaEE练习(商城练习)
今天写一个商城的练习,综合之前学习过的servlet和el表达式,来一个综合的练习: 需要用到的数据库有: /* Navicat MySQL Data Transfer Source Server : ...
- css中换行与不换行的样式
常见的css样式分为换行与不换行两种需求 1.不换行显示省略号 text-overflow:ellipsis; white-space:normal; 2.换行自适应 word-break: brea ...
- JAVA 集合 按照某个字段(依据一定条件)进行分组
由于数据不能够在本地化实现, 无法通过sql语句得到对应的结果,小编只好在业务层处理.通过调用接口得到集合,拿到集合后,通过年来分组,以此来达到对应的Map集合... 在这里小编给大家提供一个封装了一 ...
- 面试中linux常见的20个命令
1.查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件. 2.查看一个程序是否运行 ps –ef|grep tomcat 查看所有有关to ...