背景:winform+CefSharp来打开浏览器网站开发,前后端分离,后端webapi,需要在网站中获取登录的时候向API提交客户端mac地址;
解决:网站登录时调用winform中方法,方法进而在获取客户端mac地址后再请求webapi;以下展示怎样实现在js中调用后台方法:
后台在初始化cef时:
//注册JS可以调用的类,调用后,js中初始化“ CefSharp.BindObjectAsync('googleBrower');”后,就可以直接调用注册方法了“googleBrower.postTest('admin','11111',callback);”
chromiumWebBrowser1.JavascriptObjectRepository.Register("googleBrower", new ScriptCallbackManager(this), options: BindingOptions.DefaultBinder);
其中googleBrowser是让JS调用的类:
public class ScriptCallbackManager
{
Form _form;
public ScriptCallbackManager(Form form)
{
_form = form;
}
public void PostTest(string username, string pwd, IJavascriptCallback javascriptCallback)
{
Task.Factory.StartNew(async () =>
{
using (javascriptCallback)
{
string response = $"Hello,{username}---{pwd}---networkCard:{NetworkCard()}";
await javascriptCallback.ExecuteAsync(response);
}
});
}
//获取网卡信息
public string NetworkCard()
{
try
{
string MoAddress = string.Empty;
ManagementClass networkAdapter = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection adapterC = networkAdapter.GetInstances();
foreach (ManagementObject m in adapterC)
{
if ((bool)m["IPEnabled"] == true)
{
MoAddress = m["MacAddress"].ToString().Trim();
m.Dispose();
}
}
return MoAddress;
}
catch
{
return string.Empty;
}
}
}
最后在前台JS调用:
CefSharp.BindObjectAsync('googleBrower');//初始化要调用的方法类
googleBrower.postTest('admin','11111',callback);//调用相关的方法
需要注意的是,后台方法可能是大写字母开头,但是JS中调用时需要首字母改成小写!!
这样就可以把前台信息传入后端方法,再在后端方法中其他操作了;