有時咱們在winform中嵌入瀏覽器,須要在頁面上讀取電腦上的一些信息,這個時候就須要用到CefSharp的RegisterJsObject進行註冊方法而後供js進行調用了。javascript
咱們在winform中嵌入的頁面中,顯示電腦的信息,電腦信息經過winform進行讀取,js調用獲取電腦信息的方法,並將最終結果以json字符串的形式傳遞到js端,js獲取到這些信息並在頁面上進行顯示。html
定義一個專門處理js回調的類java
/// <summary> /// js c#回調類 /// </summary> class ScriptCallbackManager { /// <summary> /// 查找電腦信息 /// </summary> /// <param name="javascriptCallback"></param> public void FindComputerInfo(IJavascriptCallback javascriptCallback) { Task.Factory.StartNew(async () => { using (javascriptCallback) { Computer computer = new Computer(); string response = JsonConvert.SerializeObject(new { cpu_id = computer.CPU_Id, disk_id = computer.Disk_Id, host_name = computer.HostName, networkcard = computer.NetworkCard, serialNumber = computer.SerialNumber_Manufacturer_Product.Item1, manufacturer = computer.SerialNumber_Manufacturer_Product.Item2, product = computer.SerialNumber_Manufacturer_Product.Item3, }); await javascriptCallback.ExecuteAsync(response); } }); } }
其中computer類爲獲取電腦信息的操做類jquery
/// <summary> /// 電腦信息類 /// </summary> public class Computer { /// <summary> /// 查找cpu的id /// </summary> /// <returns></returns> public string CPU_Id { get { try { string str = string.Empty; ManagementClass mcCPU = new ManagementClass("win32_Processor"); ManagementObjectCollection mocCPU = mcCPU.GetInstances(); foreach (ManagementObject m in mocCPU) { str = m["Processorid"].ToString().Trim().Substring(0, 8); break; } return str; } catch (Exception) { return string.Empty; } } } public string Disk_Id { get { try { string hdId = string.Empty; ManagementClass hardDisk = new ManagementClass("win32_DiskDrive"); ManagementObjectCollection hardDiskC = hardDisk.GetInstances(); foreach (ManagementObject m in hardDiskC) { hdId = m.Properties["Model"].Value.ToString();//WDC WD800BB-56JKC0 break; } return hdId; } catch (Exception) { return string.Empty; } } } /// <summary> /// 網卡 /// </summary> public string NetworkCard { get { 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; } } } /// <summary> /// 獲取序列號,製造商,型號 /// </summary> public Tuple<string, string, string> SerialNumber_Manufacturer_Product { get { try { Tuple<string, string, string> tuple = null; new Tuple<string, string, string>(string.Empty,
string.Empty, string.Empty); ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_baseboard"); foreach (ManagementObject m in mos.Get()) { tuple = new Tuple<string, string, string>(m["SerialNumber"].ToString(), m["Manufacturer"].ToString(),
m["Product"].ToString()); } return tuple; } catch (Exception) { return null; } } } /// <summary> /// 計算機名稱 /// </summary> public string HostName { get { return System.Net.Dns.GetHostName(); } } }
嵌入的頁面web
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> <title></title> <script src="js/jquery.min.js"></script> <script> //設置電腦信息 function callback(data) { data = JSON.parse(data); $("#msg").html(''); $("#msg") .append($("<li>cpu_id:" + data.cpu_id + "</li>")) .append($("<li>disk_id:" + data.disk_id + "</li>")) .append($("<li>host_name:" + data.host_name + "</li>")) .append($("<li>networkcard:" + data.networkcard + "</li>")) .append($("<li>serialNumber:" + data.serialNumber + "</li>")) .append($("<li>manufacturer:" + data.manufacturer + "</li>")) .append($("<li>product:" + data.product + "</li>")); }; function findComputerInfo() { //調用後臺C#FindComputerInfo,返回結果回調方法callback googleBrower.FindComputerInfo(callback); }; </script> </head> <body> <button onclick="findComputerInfo()">獲取電腦信息</button> <ul id="msg"></ul> </body> </html>
單擊按鈕,在頁面上顯示當前電腦信息json
窗體代碼c#
/// <summary> /// 主窗體 /// </summary> public partial class MainFrm : Form { private CefSharp.CefSettings _settings; CefSharp.WinForms.ChromiumWebBrowser _webView; public MainFrm() { InitializeComponent(); _settings = new CefSharp.CefSettings(); CefSharp.Cef.Initialize(_settings); this.FormClosed += MainFrm_FormClosed; } void MainFrm_FormClosed(object sender, FormClosedEventArgs e) { if (_webView != null) { _webView.Dispose(); } } private void MainFrm_Load(object sender, EventArgs e) { this.WindowState = FormWindowState.Maximized; string url = "file:///E:/xxx/bin/x64/Debug/lenovo/test.html"; LoadPage(url); } /// <summary> /// 加載頁面 /// </summary> /// <param name="url"></param> private void LoadPage(string url) { if (_webView == null) { _webView = new CefSharp.WinForms.ChromiumWebBrowser(url); _webView.Dock = DockStyle.Fill; _webView.LifeSpanHandler = new OpenPageSelf(); _webView.RegisterJsObject("googleBrower", new ScriptCallbackManager(),
new CefSharp.BindingOptions { CamelCaseJavascriptNames = false }); this.Controls.Add(_webView); } else { _webView.Load(url); } } }
測試瀏覽器
經過在winform嵌入瀏覽器,能夠很方便處理h5頁面的展現,不用再使用winform再開發一個客戶端的程序,徹底能夠嵌入要開發的h5應用,這樣徹底應用了h5的特色,能夠在電腦端,移動端訪問,而不是每一個終端都寫代碼。app