Microsoft.Toolkit.Win32/Microsoft.Toolkit.Sample.Fo.../Form1.cs

151 строка
4.8 KiB
C#

// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Windows.Forms;
using Microsoft.Toolkit.Win32.UI.Controls;
using Microsoft.Toolkit.Win32.UI.Controls.Interop.WinRT;
namespace Microsoft.Toolkit.Sample.Forms.WebView
{
public partial class Form1 : Form
{
private bool _isFullScreen;
private bool _processExitedAttached;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
webView1?.GoBack();
}
private void button2_Click(object sender, EventArgs e)
{
webView1?.GoForward();
}
private void Go_Click(object sender, EventArgs e)
{
var result = (Uri)new WebBrowserUriTypeConverter().ConvertFromString(url.Text);
webView1.Source = result;
}
private void OnFormLoaded(object sender, EventArgs e)
{
TryAttachProcessExitedEventHandler();
}
private void TryAttachProcessExitedEventHandler()
{
if (!_processExitedAttached && webView1?.Process != null)
{
webView1.Process.ProcessExited += (o, a) =>
{
//WebView has encountered and error and was terminated
Close();
};
_processExitedAttached = true;
}
}
private void url_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter && webView1 != null)
{
var result = (Uri)new WebBrowserUriTypeConverter().ConvertFromString(url.Text);
webView1.Source = result;
}
}
private void webView1_ContainsFullScreenElementChanged(object sender, object e)
{
void EnterFullScreen()
{
WindowState = FormWindowState.Normal;
FormBorderStyle = FormBorderStyle.None;
WindowState = FormWindowState.Maximized;
}
void LeaveFullScreen()
{
FormBorderStyle = FormBorderStyle.Sizable;
WindowState = FormWindowState.Normal;
}
// Toggle
_isFullScreen = !_isFullScreen;
if (_isFullScreen)
{
EnterFullScreen();
}
else
{
LeaveFullScreen();
}
}
private void webView1_NavigationCompleted(object sender, WebViewControlNavigationCompletedEventArgs e)
{
TryAttachProcessExitedEventHandler();
url.Text = e.Uri?.ToString() ?? string.Empty;
Text = webView1.DocumentTitle;
if (!e.IsSuccess)
{
MessageBox.Show($"Could not navigate to {e.Uri}", $"Error: {e.WebErrorStatus}",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void webView1_NavigationStarting(object sender, WebViewControlNavigationStartingEventArgs e)
{
Text = "Navigating " + e.Uri?.ToString() ?? string.Empty;
url.Text = e.Uri?.ToString() ?? string.Empty;
}
private void webView1_PermissionRequested(object sender, WebViewControlPermissionRequestedEventArgs e)
{
if (e.PermissionRequest.State == WebViewControlPermissionState.Allow) return;
var msg = $"Allow {e.PermissionRequest.Uri.Host} to access {e.PermissionRequest.PermissionType}?";
var response = MessageBox.Show(msg, "Permission Request", MessageBoxButtons.YesNo, MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1);
if (response == DialogResult.Yes)
{
if (e.PermissionRequest.State == WebViewControlPermissionState.Defer)
{
webView1.GetDeferredPermissionRequestById(e.PermissionRequest.Id)?.Allow();
}
else
{
e.PermissionRequest.Allow();
}
}
else
{
if (e.PermissionRequest.State == WebViewControlPermissionState.Defer)
{
webView1.GetDeferredPermissionRequestById(e.PermissionRequest.Id)?.Deny();
}
else
{
e.PermissionRequest.Deny();
}
}
}
private void webView1_ScriptNotify(object sender, WebViewControlScriptNotifyEventArgs e)
{
MessageBox.Show(e.Value, e.Uri?.ToString() ?? string.Empty);
}
}
}