ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

VisualStudio使用NanUI实现exe程序展示web网页

2022-09-09 15:02:36  阅读:211  来源: 互联网

标签:web exe NanUI args JavaScriptValue SetValue nbsp var obj


     信息管理系统时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.运行效果如下

 

标签:web,exe,NanUI,args,JavaScriptValue,SetValue,nbsp,var,obj
来源: https://www.cnblogs.com/jiangyuhu/p/16672829.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有