initial commit
This commit is contained in:
207
Handler/Project/Dialog/fWebView.cs
Normal file
207
Handler/Project/Dialog/fWebView.cs
Normal file
@@ -0,0 +1,207 @@
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
using Microsoft.Web.WebView2.Core;
|
||||
using Microsoft.Web.WebView2.WinForms;
|
||||
|
||||
namespace Project.Dialog
|
||||
{
|
||||
public partial class fWebView : Form
|
||||
{
|
||||
private WebView2 webView2;
|
||||
private TextBox txtUrl;
|
||||
private Button btnGo;
|
||||
private Button btnBack;
|
||||
private Button btnForward;
|
||||
private Button btnRefresh;
|
||||
|
||||
public fWebView()
|
||||
{
|
||||
InitializeComponent();
|
||||
InitializeWebView();
|
||||
}
|
||||
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.SuspendLayout();
|
||||
|
||||
// Form
|
||||
this.ClientSize = new System.Drawing.Size(1200, 800);
|
||||
this.Text = "WebView2 Browser";
|
||||
this.Name = "fWebView";
|
||||
|
||||
// URL TextBox
|
||||
this.txtUrl = new TextBox();
|
||||
this.txtUrl.Location = new System.Drawing.Point(100, 10);
|
||||
this.txtUrl.Size = new System.Drawing.Size(900, 25);
|
||||
this.txtUrl.KeyDown += TxtUrl_KeyDown;
|
||||
|
||||
// Go Button
|
||||
this.btnGo = new Button();
|
||||
this.btnGo.Location = new System.Drawing.Point(1010, 10);
|
||||
this.btnGo.Size = new System.Drawing.Size(70, 25);
|
||||
this.btnGo.Text = "Go";
|
||||
this.btnGo.Click += BtnGo_Click;
|
||||
|
||||
// Back Button
|
||||
this.btnBack = new Button();
|
||||
this.btnBack.Location = new System.Drawing.Point(10, 10);
|
||||
this.btnBack.Size = new System.Drawing.Size(25, 25);
|
||||
this.btnBack.Text = "◀";
|
||||
this.btnBack.Click += BtnBack_Click;
|
||||
|
||||
// Forward Button
|
||||
this.btnForward = new Button();
|
||||
this.btnForward.Location = new System.Drawing.Point(40, 10);
|
||||
this.btnForward.Size = new System.Drawing.Size(25, 25);
|
||||
this.btnForward.Text = "▶";
|
||||
this.btnForward.Click += BtnForward_Click;
|
||||
|
||||
// Refresh Button
|
||||
this.btnRefresh = new Button();
|
||||
this.btnRefresh.Location = new System.Drawing.Point(70, 10);
|
||||
this.btnRefresh.Size = new System.Drawing.Size(25, 25);
|
||||
this.btnRefresh.Text = "⟳";
|
||||
this.btnRefresh.Click += BtnRefresh_Click;
|
||||
|
||||
// WebView2
|
||||
this.webView2 = new WebView2();
|
||||
this.webView2.Location = new System.Drawing.Point(10, 45);
|
||||
this.webView2.Size = new System.Drawing.Size(1170, 740);
|
||||
|
||||
this.Controls.Add(this.txtUrl);
|
||||
this.Controls.Add(this.btnGo);
|
||||
this.Controls.Add(this.btnBack);
|
||||
this.Controls.Add(this.btnForward);
|
||||
this.Controls.Add(this.btnRefresh);
|
||||
this.Controls.Add(this.webView2);
|
||||
|
||||
this.ResumeLayout(false);
|
||||
}
|
||||
|
||||
private async void InitializeWebView()
|
||||
{
|
||||
try
|
||||
{
|
||||
await webView2.EnsureCoreWebView2Async(null);
|
||||
|
||||
// 네비게이션 이벤트 핸들러
|
||||
webView2.CoreWebView2.NavigationCompleted += CoreWebView2_NavigationCompleted;
|
||||
webView2.CoreWebView2.SourceChanged += CoreWebView2_SourceChanged;
|
||||
|
||||
// 기본 페이지 로드
|
||||
webView2.CoreWebView2.Navigate("http://localhost:3000");
|
||||
txtUrl.Text = "http://localhost:3000";
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show($"WebView2 초기화 실패: {ex.Message}", "Error",
|
||||
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
|
||||
private void CoreWebView2_SourceChanged(object sender, CoreWebView2SourceChangedEventArgs e)
|
||||
{
|
||||
txtUrl.Text = webView2.Source.ToString();
|
||||
}
|
||||
|
||||
private void CoreWebView2_NavigationCompleted(object sender, CoreWebView2NavigationCompletedEventArgs e)
|
||||
{
|
||||
btnBack.Enabled = webView2.CanGoBack;
|
||||
btnForward.Enabled = webView2.CanGoForward;
|
||||
}
|
||||
|
||||
private void BtnGo_Click(object sender, EventArgs e)
|
||||
{
|
||||
NavigateToUrl();
|
||||
}
|
||||
|
||||
private void TxtUrl_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (e.KeyCode == Keys.Enter)
|
||||
{
|
||||
NavigateToUrl();
|
||||
e.Handled = true;
|
||||
e.SuppressKeyPress = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void NavigateToUrl()
|
||||
{
|
||||
string url = txtUrl.Text;
|
||||
if (!url.StartsWith("http://") && !url.StartsWith("https://"))
|
||||
{
|
||||
url = "http://" + url;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
webView2.CoreWebView2.Navigate(url);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show($"페이지 로드 실패: {ex.Message}", "Error",
|
||||
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnBack_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (webView2.CanGoBack)
|
||||
{
|
||||
webView2.GoBack();
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnForward_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (webView2.CanGoForward)
|
||||
{
|
||||
webView2.GoForward();
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnRefresh_Click(object sender, EventArgs e)
|
||||
{
|
||||
webView2.Reload();
|
||||
}
|
||||
|
||||
// JavaScript 실행 예제 메서드
|
||||
public async void ExecuteScriptAsync(string script)
|
||||
{
|
||||
try
|
||||
{
|
||||
string result = await webView2.CoreWebView2.ExecuteScriptAsync(script);
|
||||
MessageBox.Show($"실행 결과: {result}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show($"스크립트 실행 실패: {ex.Message}", "Error",
|
||||
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
|
||||
// C#에서 JavaScript로 메시지 전송
|
||||
public void PostMessageToWeb(string message)
|
||||
{
|
||||
try
|
||||
{
|
||||
webView2.CoreWebView2.PostWebMessageAsString(message);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show($"메시지 전송 실패: {ex.Message}", "Error",
|
||||
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
|
||||
// JavaScript에서 C#으로 메시지 수신
|
||||
private void SetupWebMessageReceived()
|
||||
{
|
||||
webView2.CoreWebView2.WebMessageReceived += (sender, e) =>
|
||||
{
|
||||
string message = e.TryGetWebMessageAsString();
|
||||
MessageBox.Show($"웹에서 받은 메시지: {message}");
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user