33
44using Microsoft . UI . Xaml ;
55using Microsoft . UI . Xaml . Controls ;
6+ using Microsoft . Web . WebView2 . Core ;
67using Windows . System ;
8+ using Windows . UI . WebUI ;
79
810namespace Files . App . Dialogs
911{
@@ -28,7 +30,10 @@ public ReleaseNotesDialog()
2830
2931 private void UpdateDialogLayout ( )
3032 {
31- ContainerGrid . MaxHeight = MainWindow . Instance . Bounds . Height - 70 ;
33+ var maxHeight = MainWindow . Instance . Bounds . Height - 70 ;
34+ var maxWidth = MainWindow . Instance . Bounds . Width ;
35+ ContainerGrid . Height = maxHeight > 740 ? 740 : maxHeight ;
36+ ContainerGrid . Width = maxWidth > 740 ? 740 : maxWidth ;
3237 }
3338
3439 private void Current_SizeChanged ( object sender , WindowSizeChangedEventArgs e )
@@ -60,10 +65,40 @@ private ContentDialog SetContentDialogRoot(ContentDialog contentDialog)
6065 return contentDialog ;
6166 }
6267
63- private async void ReleaseNotesMarkdownTextBlock_LinkClicked ( object sender , CommunityToolkit . WinUI . UI . Controls . LinkClickedEventArgs e )
68+ private async void BlogPostWebView_CoreWebView2Initialized ( WebView2 sender , CoreWebView2InitializedEventArgs args )
6469 {
65- if ( Uri . TryCreate ( e . Link , UriKind . Absolute , out Uri ? link ) )
66- await Launcher . LaunchUriAsync ( link ) ;
70+ BlogPostWebView . CoreWebView2 . Settings . AreDefaultContextMenusEnabled = false ;
71+ BlogPostWebView . CoreWebView2 . Settings . AreDevToolsEnabled = false ;
72+ BlogPostWebView . CoreWebView2 . Settings . AreBrowserAcceleratorKeysEnabled = false ;
73+ BlogPostWebView . CoreWebView2 . Settings . IsSwipeNavigationEnabled = false ;
74+
75+ var script = @"
76+ document.addEventListener('click', function(event) {
77+ var target = event.target;
78+ while (target && target.tagName !== 'A') {
79+ target = target.parentElement;
80+ }
81+ if (target && target.href) {
82+ event.preventDefault();
83+ window.chrome.webview.postMessage(target.href);
84+ }
85+ });
86+ " ;
87+
88+ await sender . CoreWebView2 . AddScriptToExecuteOnDocumentCreatedAsync ( script ) ;
89+ sender . WebMessageReceived += WebView_WebMessageReceived ;
6790 }
91+
92+ private async void WebView_WebMessageReceived ( WebView2 sender , CoreWebView2WebMessageReceivedEventArgs args )
93+ {
94+ // Open link in web browser
95+ if ( Uri . TryCreate ( args . TryGetWebMessageAsString ( ) , UriKind . Absolute , out Uri ? uri ) )
96+ await Launcher . LaunchUriAsync ( uri ) ;
97+
98+ // Navigate back to blog post
99+ if ( sender . CoreWebView2 . CanGoBack )
100+ sender . CoreWebView2 . GoBack ( ) ;
101+ }
102+
68103 }
69104}
0 commit comments