1
1
using System ;
2
+ using System . Collections . Generic ;
2
3
using System . IO ;
3
4
using Microsoft . Extensions . DependencyInjection ;
4
5
using Microsoft . Extensions . FileProviders ;
@@ -15,6 +16,8 @@ namespace Microsoft.AspNetCore.Components.WebView.Maui
15
16
/// </summary>
16
17
public partial class BlazorWebViewHandler : ViewHandler < IBlazorWebView , NWebView >
17
18
{
19
+ private const string BlazorWebViewIdentifier = "BlazorWebView:" ;
20
+ private const string UserAgentHeaderKey = "User-Agent" ;
18
21
private const string AppOrigin = "http://0.0.0.0/" ;
19
22
private const string BlazorInitScript = @"
20
23
window.__receiveMessageCallbacks = [];
@@ -41,6 +44,8 @@ public partial class BlazorWebViewHandler : ViewHandler<IBlazorWebView, NWebView
41
44
})();
42
45
" ;
43
46
47
+ static private Dictionary < string , WeakReference < BlazorWebViewHandler > > s_webviewHandlerTable = new Dictionary < string , WeakReference < BlazorWebViewHandler > > ( ) ;
48
+
44
49
private TizenWebViewManager ? _webviewManager ;
45
50
46
51
private bool RequiredStartupPropertiesSet =>
@@ -62,15 +67,18 @@ protected override NWebView CreatePlatformView()
62
67
protected override void ConnectHandler ( NWebView platformView )
63
68
{
64
69
platformView . PageLoadFinished += OnLoadFinished ;
65
- platformView . Context . RegisterHttpRequestInterceptedCallback ( OnRequestInterceptCallback ) ;
70
+ platformView . Context . RegisterHttpRequestInterceptedCallback ( OnRequestInterceptStaticCallback ) ;
66
71
platformView . AddJavaScriptMessageHandler ( "BlazorHandler" , PostMessageFromJS ) ;
72
+ platformView . UserAgent += $ " { BlazorWebViewIdentifier } { GetHashCode ( ) } ";
73
+ s_webviewHandlerTable [ GetHashCode ( ) . ToString ( ) ] = new WeakReference < BlazorWebViewHandler > ( this ) ;
67
74
}
68
75
69
76
/// <inheritdoc />
70
77
protected override void DisconnectHandler ( NWebView platformView )
71
78
{
72
79
platformView . PageLoadFinished -= OnLoadFinished ;
73
80
base . DisconnectHandler ( platformView ) ;
81
+ s_webviewHandlerTable . Remove ( GetHashCode ( ) . ToString ( ) ) ;
74
82
}
75
83
76
84
@@ -88,6 +96,25 @@ private void OnLoadFinished(object? sender, WebViewPageLoadEventArgs e)
88
96
PlatformView . EvaluateJavaScript ( BlazorInitScript ) ;
89
97
}
90
98
99
+ private static void OnRequestInterceptStaticCallback ( WebHttpRequestInterceptor interceptor )
100
+ {
101
+ if ( interceptor . Headers . TryGetValue ( UserAgentHeaderKey , out var agent ) )
102
+ {
103
+ var idx = agent . IndexOf ( BlazorWebViewIdentifier ) ;
104
+ if ( idx >= 0 )
105
+ {
106
+ var webviewKey = agent . Substring ( idx + BlazorWebViewIdentifier . Length ) ;
107
+ if ( s_webviewHandlerTable . TryGetValue ( webviewKey , out var weakHandler )
108
+ && weakHandler . TryGetTarget ( out var handler ) )
109
+ {
110
+ handler . OnRequestInterceptCallback ( interceptor ) ;
111
+ return ;
112
+ }
113
+ }
114
+ }
115
+ interceptor . Ignore ( ) ;
116
+ }
117
+
91
118
private void OnRequestInterceptCallback ( WebHttpRequestInterceptor interceptor )
92
119
{
93
120
var url = interceptor . Url ;
0 commit comments