using FCM0000.Mail; using FCOMMON; using Microsoft.Web.WebView2.Core; using Microsoft.Web.WebView2.WinForms; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Project.Dialog { public partial class fDashboard : fBase { private WebView2 webView; private Web.MachineBridge _machineBridge; public fDashboard() { InitializeComponent(); InitializeWebView2(); _machineBridge = new Web.MachineBridge(this); } bool loadok = false; public void RefreshView() { if (loadok) webView.Reload(); } private void InitializeWebView2() { // 수동으로 WebView2 컨트롤 생성 this.webView = new WebView2(); // 기본 속성 설정 this.webView.CreationProperties = null; this.webView.DefaultBackgroundColor = Color.White; this.webView.Dock = DockStyle.Fill; this.webView.Location = new Point(0, 0); this.webView.Name = "webView21"; this.webView.Size = new Size(800, 600); this.webView.TabIndex = 0; this.webView.ZoomFactor = 1D; // 폼에 추가 this.Controls.Add(this.webView); // 비동기 초기화 InitializeAsync(); } private async void InitializeAsync() { try { // Fixed Version 경로 설정 string runtimePath = Path.Combine(Application.StartupPath, "WebView2Runtime"); if (Directory.Exists(runtimePath)) { var env = await CoreWebView2Environment.CreateAsync(runtimePath); await this.webView.EnsureCoreWebView2Async(env); } else { // 시스템에 설치된 WebView2 사용 await this.webView.EnsureCoreWebView2Async(); } var wwwroot = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Web", "dist"); webView.CoreWebView2.SetVirtualHostNameToFolderMapping( "hmi.local", wwwroot, CoreWebView2HostResourceAccessKind.Allow); // 2. Inject Native Object webView.CoreWebView2.AddHostObjectToScript("machine", _machineBridge); Pub.WebServiceURL = "http://hmi.local"; RefreshPage(); label1.Visible = false; loadok = true; } catch (Exception ex) { MessageBox.Show($"WebView2 초기화 실패: {ex.Message}"); } } /// /// 로그인 상태에 따라서 페이지를 전환한다 /// public void RefreshPage() { webView.Source = new Uri($"{Pub.WebServiceURL}/index.html"); //if (FCOMMON.info.Login.no.isEmpty()) //webView.Source = new Uri($"{Pub.WebServiceURL}/login.html"); // else // webView.Source = new Uri($"{Pub.WebServiceURL}/DashBoard/index.html"); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); EnsureVisibleAndUsableSize(); } private void label1_Click(object sender, EventArgs e) { } } }