VisualStudio使用NanUI实现exe程序展示web网页
2022/9/10 1:24:39
本文主要是介绍VisualStudio使用NanUI实现exe程序展示web网页,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
信息管理系统时B/S架构Web程序,现需要调取每台电脑上的硬件设备,需使用exe程序展示web,调用串口硬件设备,使用到了NanUI框架。
1.新建项目:选择Windows窗体应用程序
2.安装NanUI
注意使用80.1版本的,90最新版本有些函数已经不存在了。
3.修改入口程序Program.cs文件
static void Main()
{
WinFormium.CreateRuntimeBuilder(env => {
env.CustomCefSettings(settings =>
{
// 在此处设置 CEF 的相关参数
}); env.CustomCefCommandLineArguments(commandLine => {
// 在此处指定 CEF 命令行参数
});
}, app =>
{
/ /指定启动窗体
app.UseMainWindow(context => new WinLogin());
})
.Build().Run();
}
4.新建类文件WinLogin.cs继承Formium
public class WinLogin : Formium
{
public override string StartUrl => @"E:\WORK\WorkCode\RFTobacco\RFTobacoo\WFWCSCRS\Html\test.html";
public override HostWindowType WindowType => HostWindowType.System;
protected override void OnReady()
{
// 在此处进行浏览器相关操作
ShowDevTools();
//ExecuteJavaScript("alert('Hello World')");
//注册方法到JS
MapClrObjectToJavaScript()
}
public WinLogin()
{
//当浏览器关闭时触发
BeforeClose += MainIndex_BeforeClose;
//当浏览器加载完成后调用
LoadEnd += MainIndex_LoadEnd;
// 在此处设置窗口样式
Size = new System.Drawing.Size(1217, 777);
//设置标题
Title = "";
// 在此处设置窗口Icon
//Icon = new System.Drawing.Icon("Mega.ico");
//设置启动位置
StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
}
}
5//注册方法到JS的方法:
private void MapClrObjectToJavaScript()
{
var obj = JavaScriptValue.CreateObject();
//注册只读属性
obj.SetValue("now", JavaScriptValue.CreateProperty
(
() => { return JavaScriptValue.CreateDateTime(DateTime.Now); }
)
);
//注册值
obj.SetValue("version", JavaScriptValue.CreateString
(
Assembly.GetExecutingAssembly().GetName().Version?.ToString()
)
);
//注册可读写属性
obj.SetValue("subtitle", JavaScriptValue.CreateProperty
(
() => JavaScriptValue.CreateString(Subtitle), title => Subtitle = title.GetString()
)
);
//注册同步方法
obj.SetValue("messagebox", JavaScriptValue.CreateFunction(args =>
{
var msg = args.FirstOrDefault(x => x.IsString);
var text = msg?.GetString();
InvokeIfRequired(() =>
{
MessageBox.Show(HostWindow, text, "Message from JS", MessageBoxButtons.OK, MessageBoxIcon.Information);
});
return JavaScriptValue.CreateString(text);
}));
//注册异步方法
obj.SetValue("asyncmethod", JavaScriptValue.CreateFunction((args, callback) =>
{
Task.Run(async () =>
{
var rnd = new Random(DateTime.Now.Millisecond);
var rndValue = rnd.Next(1000, 2000);
await Task.Delay(rndValue);
var obj = JavaScriptValue.CreateObject();
obj.SetValue("delayed", JavaScriptValue.CreateNumber(rndValue));
obj.SetValue("message", JavaScriptValue.CreateString($"Delayed {rndValue} milliseconds"));
callback.Success(obj);
});
}));
//接收JS的一个参数
obj.SetValue("JsCallCSharp", JavaScriptValue.CreateFunction(args =>
{
var res = args.FirstOrDefault(x => x.IsString);
MessageBox.Show(res.GetString());
return null;
}
));
//向JS返回一个字符串
obj.SetValue("sayHi", JavaScriptValue.CreateFunction(args =>
{
var username = "";
var password = "";
LoginManager loginManager = new LoginManager();
var retObj = loginManager.Login(username, password);
return JavaScriptValue.CreateString(retObj.Message);
}
));
//接收来自JS的一个数组
obj.SetValue("getArr", JavaScriptValue.CreateFunction(args =>
{
var arr = args.FirstOrDefault(x => x.IsArray);
if (arr != null)
{
int len = arr.ArrayLength;
for (int i = 0; i < len; i++)
{
int v = arr.GetValue(i).GetInt();
Console.WriteLine("=============数组:" + v);
}
}
return null;
}
));
//接收JS的一个函数
obj.SetValue("CallBack", JavaScriptValue.CreateFunction(args =>
{
var res = args.FirstOrDefault(x => x.IsFunction);
if (res != null)
{
res.ExecuteFunctionAsync(GetMainFrame(),
new JavaScriptValue[] { JavaScriptValue.CreateString("Hello from C#") });
}
return null;
}
));
//对象注册到 JavaScript 环境的Formium.external里,并取名CSharpProject
RegisterExternalObjectValue("CSharpProject", obj);
}
6.html文件中测试调用
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<input id="Button1" type="button" value="button" onclick="test()" />
<script>
function test() {
//alert(123)
console.log(Formium.external.CSharpProject.messagebox('oh shit'))
console.log(Formium.external.CSharpProject.version)
alert(Formium.external.CSharpProject.now)
alert(Formium.external.CSharpProject.sayHi())
}
</script><table style="width:100%;"><tr><td> </td><td> </td><td> </td></tr><tr><td> </td><td> </td><td> </td></tr><tr><td> </td><td> </td><td> </td></tr></table>
<a href="E:\WORK\WorkCode\RFTobacco\RFTobacoo\WFWCSCRS\Html\login.html">登录页</a>
</body>
</html>
7.运行效果如下
这篇关于VisualStudio使用NanUI实现exe程序展示web网页的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27数据结构与算法面试题详解及练习
- 2024-12-27网络请求面试题详解与实战
- 2024-12-27数据结构和算法面试真题详解与实战教程
- 2024-12-27网络请求面试真题解析与实战教程
- 2024-12-27数据结构和算法大厂面试真题详解与实战指南
- 2024-12-27TS大厂面试真题解析与应对策略
- 2024-12-27TS大厂面试真题详解与解析
- 2024-12-27网站安全入门:如何识别和修复漏洞
- 2024-12-27SQL注入基础教程
- 2024-12-27初学者指南:理解和修复跨域漏洞