Skip to content

Commit bfc0309

Browse files
jsuarezruizPureWeen
authored andcommitted
[iOS] Fix crash closing Popup with WebView (#21718)
* Added repro sample * Fix the issue * Added UI Test * Updated csproj * More changes * Removed sample and test * More changes * Removed unnecesary changes
1 parent df8aa54 commit bfc0309

File tree

1 file changed

+32
-9
lines changed

1 file changed

+32
-9
lines changed

src/Core/src/Platform/iOS/MauiWebViewNavigationDelegate.cs

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,17 @@ public MauiWebViewNavigationDelegate(IWebViewHandler handler)
2626
public void DidFinishNavigation(WKWebView webView, WKNavigation navigation)
2727
{
2828
var handler = Handler;
29+
30+
if (handler is null || !handler.IsConnected())
31+
return;
32+
33+
var platformView = handler?.PlatformView;
2934
var virtualView = handler?.VirtualView;
3035

31-
if (handler == null || virtualView == null)
36+
if (platformView is null || virtualView is null)
3237
return;
3338

34-
handler.PlatformView?.UpdateCanGoBackForward(handler.VirtualView);
39+
platformView.UpdateCanGoBackForward(virtualView);
3540

3641
if (webView.IsLoading)
3742
return;
@@ -47,49 +52,67 @@ public void DidFinishNavigation(WKWebView webView, WKNavigation navigation)
4752
if (handler is WebViewHandler webViewHandler)
4853
webViewHandler.ProcessNavigatedAsync(url).FireAndForget();
4954
else
50-
handler.PlatformView?.UpdateCanGoBackForward(virtualView);
55+
platformView.UpdateCanGoBackForward(virtualView);
5156
}
5257

5358
[Export("webView:didFailNavigation:withError:")]
5459
public void DidFailNavigation(WKWebView webView, WKNavigation navigation, NSError error)
5560
{
5661
var handler = Handler;
62+
63+
if (handler is null || !handler.IsConnected())
64+
return;
65+
66+
var platformView = handler?.PlatformView;
5767
var virtualView = handler?.VirtualView;
5868

59-
if (handler == null || virtualView == null)
69+
if (platformView is null || virtualView is null)
6070
return;
6171

6272
var url = GetCurrentUrl();
6373

6474
virtualView.Navigated(_lastEvent, url, WebNavigationResult.Failure);
6575

66-
handler.PlatformView?.UpdateCanGoBackForward(virtualView);
76+
platformView.UpdateCanGoBackForward(virtualView);
6777
}
6878

6979
[Export("webView:didFailProvisionalNavigation:withError:")]
7080
public void DidFailProvisionalNavigation(WKWebView webView, WKNavigation navigation, NSError error)
7181
{
7282
var handler = Handler;
83+
84+
if (handler is null || !handler.IsConnected())
85+
return;
86+
87+
var platformView = handler?.PlatformView;
7388
var virtualView = handler?.VirtualView;
7489

75-
if (handler == null || virtualView == null)
90+
if (platformView is null || virtualView is null)
7691
return;
7792

7893
var url = GetCurrentUrl();
7994

8095
virtualView.Navigated(_lastEvent, url, WebNavigationResult.Failure);
8196

82-
handler.PlatformView?.UpdateCanGoBackForward(virtualView);
97+
platformView.UpdateCanGoBackForward(virtualView);
8398
}
8499

85100
// https://stackoverflow.com/questions/37509990/migrating-from-uiwebview-to-wkwebview
86101
[Export("webView:decidePolicyForNavigationAction:decisionHandler:")]
87102
public void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action<WKNavigationActionPolicy> decisionHandler)
88103
{
89104
var handler = Handler;
105+
106+
if (handler is null || !handler.IsConnected())
107+
{
108+
decisionHandler.Invoke(WKNavigationActionPolicy.Cancel);
109+
return;
110+
}
111+
112+
var platformView = handler?.PlatformView;
90113
var virtualView = handler?.VirtualView;
91114

92-
if (handler == null || virtualView == null)
115+
if (platformView is null || virtualView is null)
93116
{
94117
decisionHandler.Invoke(WKNavigationActionPolicy.Cancel);
95118
return;
@@ -130,7 +153,7 @@ public void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction,
130153
var lastUrl = request.Url.ToString();
131154

132155
bool cancel = virtualView.Navigating(navEvent, lastUrl);
133-
handler.PlatformView?.UpdateCanGoBackForward(virtualView);
156+
platformView.UpdateCanGoBackForward(virtualView);
134157
decisionHandler(cancel ? WKNavigationActionPolicy.Cancel : WKNavigationActionPolicy.Allow);
135158
}
136159

0 commit comments

Comments
 (0)