After ios 11 upgrade WKWebView does not load my website

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:
NSAppTransportSecurity

NSAllowsArbitraryLoads

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

Tagged:

Posts

  • hinojosachapelhinojosachapel ESMember ✭✭

    I have had a very similar situation in a project I'm working on and found the solution you posted over StackOverflow (https://stackoverflow.com/questions/46350773/after-ios-11-upgrade-wkwebview-does-not-load-my-website). I think you should also post it here. It solved my problem and probably it'll be valuable for other people. BTW, thanks!

  • HectorMenesesHectorMeneses USMember ✭✭

    Hi hinojosachapel,

    I think I posted this question twice in Xamarin Forums (by mistake) and I only updated one of them with the solution. :(

    I'm glad this solution helped you.

    Here's the solution I found:

    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 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. :)

  • JongfooSheeJongfooShee MYUniversity ✭✭

    Hi @HectorMeneses, after apply your solution in my renderer, the error appear "no suitable method found to override" for this DecidePolicy function and it doesn't work.... How do you solve this? Thanks for advanced.

Sign In or Register to comment.