NanUI文档 - 打包并使用内嵌式的HTML/CSS/JS资源
NanUI文档目录
- NanUI简介
- 开始使用NanUI
- 打包并使用内嵌式的HTML/CSS/JS资源
- 使用网页来设计整个窗口
- 如何实现C#与Javascript的相互通信
- 如何处理NanUI中的下载过程 - DonwloadHandler的使用(待更新。。。)
- 如何处理NanUI中的弹窗过程 - LifeSpanHandler的使用(待更新。。。)
- 如何控制Javascript对话框 - JsDialogHandler的使用(待更新。。。)
- 自定义资源处理程序 (待更新。。。)
打包并使用内嵌式的HTML/CSS/JS资源
在使用HTML/CSS/JS设计软件界面时,如果每次都从远程服务器加载资源那显然是不现实的:如果界面是从远程服务器获取,遇到网速不佳时,那么将给用户带来非常糟糕的体验。为了避免这种尴尬的局面,NanUI可以将呈现界面的HTML/CSS/JS等文件作为嵌入资源编译到项目中,这样操纵既可以加速软件界面的加载速度,也可以避免界面遭到恶意修改。
下面的文章将详细介绍如何将HTML/CSS/JS等文件打包到项目中。
第一步 新建NanUI项目
按照之前的教程,新建一个Windows窗体应用程序,并在Program中完成CEF的相关设置操作。
第二步 在项目中添加网页资源
在项目中添加index.html文件,内容随意。在本示例中,在页面中添加以下html标记:
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>HELLO</title>
</head>
<body>
<h1>Hello NanUI!</h1>
</body>
</html>
若要将index.html文件作为嵌入资源编译到项目中,您需要在Visual Studio的资源管理器中选中index.html文件,然后在该文件的属性窗口的生成操作栏目中选中该文件为嵌入的资源。如图所示:
这样,在项目编译时index.html文件将会作为内嵌的资源编译到输出的可执行文件中。
第三步 注册嵌入资源的程序集
要让NanUI加载嵌入的资源,需要在项目的Bootstrap执行Load方法成功后注册程序集中的嵌入资源,如下面代码所示,在Load成功后使用Bootstrap静态类的RegisterAssemblyResources将当前程序集中的资源注册到环境中。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace EmbeddedHtmlResources
{
using NetDimension.NanUI;
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//指定CEF架构和文件目录结构,并初始化CEF
if (Bootstrap.Load())
{
//注册嵌入资源,并为指定资源指定一个假的域名my.resource.local
Bootstrap.RegisterAssemblyResources(System.Reflection.Assembly.GetExecutingAssembly(), null, "my.resource.local");
Application.Run(new Form1());
}
}
}
}
RegisterAssemblyResources方法的第一个参数是需要执行注册的程序集实例,第二个参数指定一个虚假的域名,嵌入的资源将通过该域名进行访问。
除了将html/css/js文件打包到当前项目,还可以将这些资源打包到单独的dll中,然后用反射的方式来获取该资源dll的程序集并使用上述方法进行注册。例如,将另一个index.html文件打包到EmbeddedResourcesInSplitAssembly.dll程序集中,内容可以与上面的本地项目中的index.html有所差别,然后主项目在CEF初始化成功之后通过下面的方法,也可以将外部程序集中的资源加载到NanUI环境中的:
//指定CEF架构和文件目录结构,并初始化CEF
if (Bootstrap.Load(PlatformArch.Auto, System.IO.Path.Combine(Application.StartupPath, "fx"), System.IO.Path.Combine(Application.StartupPath, "fx\\Resources"), System.IO.Path.Combine(Application.StartupPath, "fx\\Resources\\locales")))
{
//注册嵌入资源,并为指定资源指定一个假的域名my.resource.local
Bootstrap.RegisterAssemblyResources(System.Reflection.Assembly.GetExecutingAssembly(), "my.resource.local");
//加载分离式的资源
var separateAssembly = System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(Application.StartupPath, "EmbeddedResourcesInSplitAssembly.dll"));
//注册外部的嵌入资源,并为指定资源指定一个假的域名separate.resource.local
Bootstrap.RegisterAssemblyResources(separateAssembly , "separate.resource.local");
Application.Run(new Form1());
}
您可以在项目中注册多个程序中的嵌入式资源,只需指定不同的域名(domin参数)即可。
第四步 在Formium窗体中使用嵌入的资源
按照上述方法,我们就完成了资源文件的嵌入。那么如何这些嵌入的资源文件呢?其实就跟平常加载网页上的资源是一样的,只需要按照我们指定的虚假域名和资源嵌入的路径组合以后,就可以在NanUI中使用嵌入的资源了。
例如,按照上面步骤中的方式对文件进行嵌入后,我们就可以通过http://my.resource.local/index.html访问到主项目中的index.html文件,然后通过 http://separate.resource.local/index.html访问到外部程序集EmbeddedResourcesInSplitAssembly.dll中的index.html文件了。
那么,如何测试我们的资源是否这确被嵌入到程序集,并且也正常加载了呢?最简单的例子就是在我们的窗体中直接使用这些地址。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace EmbeddedHtmlResources
{
using NetDimension.NanUI;
public partial class Form1 : Formium
{
public Form1()
: base("http://my.resource.local/index.html")
{
InitializeComponent();
}
}
}
编译并执行项目文件,我们就可以看到嵌入的资源已经可以正确加载了。
示例源码
git clone https://github.com/NetDimension/NanUI-Examples-02-Use-Embedded-Resources-In-NanUI.git
社群和帮助
GitHub
https://github.com/NetDimension/NanUI/
交流群QQ群
521854872
赞助作者
如果你喜欢我的工作,并且希望NanUI持续的发展,请对NanUI项目进行捐助以此来鼓励和支持我继续NanUI的开发工作。你可以使用微信或者支付宝来扫描下面的二维码进行捐助。

NanUI文档 - 打包并使用内嵌式的HTML/CSS/JS资源的更多相关文章
- NanUI文档 - 开始使用NanUI
NanUI文档目录 NanUI简介 开始使用NanUI 打包并使用内嵌式的HTML/CSS/JS资源 使用网页来设计整个窗口 如何实现C#与Javascript相互掉用(待更新...) 如何处理Nan ...
- NanUI文档 - 使用网页来设计整个窗口
NanUI文档目录 NanUI简介 开始使用NanUI 打包并使用内嵌式的HTML/CSS/JS资源 使用网页来设计整个窗口 如何实现C#与Javascript相互掉用(待更新...) 如何处理Nan ...
- NanUI文档 - 如何实现C#与Javascript的相互通信
NanUI文档目录 NanUI简介 开始使用NanUI 打包并使用内嵌式的HTML/CSS/JS资源 使用网页来设计整个窗口 如何实现C#与Javascript的相互通信 如何处理NanUI中的下载过 ...
- HTML span标签:用来组合文档中的行内元素
在DIV+CSS切图布局重构技术中,除了常常使用div标签外也常常使用span标签布局,通常也可以通过对span标签对象设置不同样式实现我们要的美化效果.这里主机吧主要讲的是span标签的定义和用法. ...
- 13 ,CSS 入门基础,行内排版内嵌式排版和外部排版样式
1.认识 CSS 2.传统 HTML 设计网页版面的缺点 3.CSS 的特点 4.CSS 的排版样式 13.1 认识CSS CSS的英文全名是 Cascading Style Sheets,中文可翻译 ...
- JavaScript--返回顶部方法:锚链接、行内式js写法、外链式、内嵌式
返回网页顶部方法 一.锚链接 simpleDemo: <!DOCTYPE html> <html lang="en"> <head> <m ...
- 将markdown文档使用gulp转换为HTML【附带两套css样式】
将markdown文档使用gulp转换为HTML[附带两套css样式] 今天遇到一个需求,即将Markdown文档转为为HTML在网页展示,身为一名程序员,能用代码解决的问题,手动打一遍无疑是可耻的. ...
- JS-特效 ~ 04. client对象、网页可视区域的宽高、client / offset / scroll 三大家族的区别、冒泡事件、事件委托、获取内嵌式和外链式属性getStyle(ele,attr) ;、缓动动画封装
知识点: 模拟滚动条的解除事件问题 : event内置对象,包含 了大量事件: page兼容性: pageX || clientX + scool().top : if (true === a)tr ...
- java文档打包成压缩包并且下载
需求,根据产品ID查询产品详情,产品详情会返回产品的一些文案,以及图片的url.需要做成,将文案信息记录在一个txt文档中,然后图片下载到文件夹,最后下载到本地,下载后自动删除刚才生成的文件夹以及文件 ...
随机推荐
- [转载] Java NIO与IO
原文地址:http://tutorials.jenkov.com/java-nio/nio-vs-io.html 作者:Jakob Jenkov 译者:郭蕾 校对:方腾飞 当学习了Java ...
- ASP.NET Core 认证与授权[5]:初识授权
经过前面几章的姗姗学步,我们了解了在 ASP.NET Core 中是如何认证的,终于来到了授权阶段.在认证阶段我们通过用户令牌获取到用户的Claims,而授权便是对这些的Claims的验证,如:是否拥 ...
- boot之mybatis
特别注意,此种方法和starter不兼容,我用了两个方式混蛋,发现跑不起来! spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driv ...
- bootstrap导航栏.nav与.navbar区别
刚刚看了bootstrap的导航栏,发现有点弄混了,现在来整理一下: 一.简单的ul,li组成的导航: <ul class="nav nav-pills justify-content ...
- overflow-x: scroll;横向滑动详细讲解
overflow-x: scroll;横向滑动(移动端使用详解) css3 , ie8以上 <!DOCTYPE html> <html lang="en"> ...
- SoapUI实践:自动化测试、压力测试、持续集成
因为项目的原因,前段时间研究并使用了 SoapUI 测试工具进行自测开发的 api.下面将研究的成果展示给大家,希望对需要的人有所帮助. SoapUI 是什么? SoapUI 是一个开源测试工具,通过 ...
- webpack 3.X学习之Babel配置
Babel是什么 Babel是一个编译JavaScript的平台,它的强大之处表现在可以通过编译帮你达到: 使用下一代的javascript(ES6,ES7,--)代码,即使当前浏览器没有完成支持: ...
- SSM框架下结合 log4j、slf4j打印日志
首先加入log4j和slf4j的jar包 <!-- 日志处理 <!-- slf4j日志包--> <dependency> <groupId>org.slf4j ...
- JAVA 异常向上抛和向下抛的优劣势
向上抛: 优点:向上抛出异常,下面代码清秀: 缺点:不能直接看出抛出异常的代码: 向下抛: 优点:能直接看到出现异常的代码,方便查找,显得严谨: 缺点:代码太多: 总结:尽量向上抛,代码量减少,同意解 ...
- CentOS下redis集群安装
环境: 一台CentOS虚拟机上部署六个节点,创建3个master,3个slave节点 1.下载并解压 cd /root wget http://download.redis.io/releases/ ...