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>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr></table>
<a href="E:\WORK\WorkCode\RFTobacco\RFTobacoo\WFWCSCRS\Html\login.html">登录页</a>
</body>
</html>

7.运行效果如下

 



这篇关于VisualStudio使用NanUI实现exe程序展示web网页的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程