After ios 11 upgrade WKWebView does not load my website

Viewed 3243

After ios 11 upgrade WKWebView does not load my website. I added the following methods to my renderer:

    [Export("webViewWebContentProcessDidTerminate:")]
    public virtual void ContentProcessDidTerminate(WKWebView webView)
    {

        Console.WriteLine("ContentProcessDidTerminate");
    }

    [Export("webView:didFinishNavigation:")]
    public void DidFinishNavigation(WKWebView webView, WKNavigation navigation)
    {

        UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false;
        Console.WriteLine("DidFinishNavigation");
    }

    [Export("webView:didFailNavigation:withError:")]
    public void DidFailNavigation(WKWebView webView, WKNavigation navigation, NSError error)
    {
        // If navigation fails, this gets called
        Console.WriteLine("DidFailNavigation:" + error.ToString());
    }

    [Export("webView:didFailProvisionalNavigation:withError:")]
    public void DidFailProvisionalNavigation(WKWebView webView, WKNavigation navigation, NSError error)
    {
        // If navigation fails, this gets called
        Console.WriteLine("DidFailProvisionalNavigation" + error.ToString());
    }

    [Export("webView:didStartProvisionalNavigation:")]
    public void DidStartProvisionalNavigation(WKWebView webView, WKNavigation navigation)
    {

        UIApplication.SharedApplication.NetworkActivityIndicatorVisible = true;
        // When navigation starts, this gets called
        Console.WriteLine("DidStartProvisionalNavigation");
    }

The application shows didStartProvisionalNavigation but it does not move to the other methods.

I also added the following to my info.plist:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
</dict>

I also tried running my WKWebview against another of my sites and that one works just fine.

In Safari, after attaching it to my WKWebView, I can see that some webapi calls does not seem to complete the request. Yet in some cases the same request does complete but some others does not.

Is anyone having this type of issue?

Any help to solve this would be really appreciated.

Thanks,

Hector

UPDATE:I found the solution

It turns out that in iOS 11 the WKWebView is trying to navigate to "about:blank". I'm not aware of our site having that "page". Then in my DecidePolicy that page was not allowed and I guess that was also stopping my website from continuing loading normally. I added a condition to enable navigation to "about:blank" and that solved it.

[Export("webView:decidePolicyForNavigationAction:decisionHandler:")]
    public override void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action<WKNavigationActionPolicy> decisionHandler)
    {

        var navType = navigationAction.NavigationType;
        var targetFrame = navigationAction.TargetFrame;

        var url = navigationAction.Request.Url;
        if (
            url.ToString().StartsWith("http") && (targetFrame != null && targetFrame.MainFrame == true)
            )
        {
            decisionHandler(WKNavigationActionPolicy.Allow);
        }
        else if (
            (url.ToString().StartsWith("http") && targetFrame == null)
            ||
            url.ToString().StartsWith("mailto:")
            || url.ToString().StartsWith("tel:")) //Whatever your test happens to be
        {
            //decisionHandler(WKNavigationActionPolicy.Allow);

            Device.BeginInvokeOnMainThread(() =>
            {
                UIApplication.SharedApplication.OpenUrl(url);
            }
            );
        } // NEED THIS IN IOS 11
        else if ( url.ToString().StartsWith("about") )
        {
            decisionHandler(WKNavigationActionPolicy.Allow);
        }
    }

Hope this helps someone else. :)

0 Answers
Related