예제 #1
0
        public override async void OnPageFinished(Android.Webkit.WebView view, string url)
        {
            if (_reference == null || !_reference.TryGetTarget(out var renderer))
            {
                return;
            }
            if (renderer.Element == null || !renderer.Element.Navigating)
            {
                return;
            }

            renderer.Element.Navigating = false;

            renderer.Element.HandleNavigationCompleted(url);
            await renderer.OnJavascriptInjectionRequest(HybridWebViewControl.InjectedFunction);

            if (renderer.Element.EnableGlobalCallbacks)
            {
                foreach (var function in HybridWebViewControl.GlobalRegisteredCallbacks.ToList())
                {
                    await renderer.OnJavascriptInjectionRequest(HybridWebViewControl.GenerateFunctionScript(function.Key));
                }
            }

            foreach (var function in renderer.Element.LocalRegisteredCallbacks.ToList())
            {
                await renderer.OnJavascriptInjectionRequest(HybridWebViewControl.GenerateFunctionScript(function.Key));
            }

            renderer.Element.CanGoBack    = view.CanGoBack();
            renderer.Element.CanGoForward = view.CanGoForward();
            renderer.Element.HandleContentLoaded();
        }
예제 #2
0
        private bool AttemptToHandleCustomUrlScheme(Android.Webkit.WebView view, string url)
        {
            if (url.StartsWith("mailto"))
            {
                var emailData = Android.Net.MailTo.Parse(url);

                var email = new Intent(Intent.ActionSendto);

                email.SetData(Android.Net.Uri.Parse("mailto:"));
                email.PutExtra(Intent.ExtraEmail, new string[] { emailData.To });
                email.PutExtra(Intent.ExtraSubject, emailData.Subject);
                email.PutExtra(Intent.ExtraCc, emailData.Cc);
                email.PutExtra(Intent.ExtraText, emailData.Body);

                if (email.ResolveActivity(Forms.Context.PackageManager) != null)
                {
                    Forms.Context.StartActivity(email);
                }

                return(true);
            }

            if (url.StartsWith("http"))
            {
                var webPage = new Intent(Intent.ActionView, Android.Net.Uri.Parse(url));
                if (webPage.ResolveActivity(Forms.Context.PackageManager) != null)
                {
                    Forms.Context.StartActivity(webPage);
                }

                return(true);
            }

            return(false);
        }
예제 #3
0
        private void CheckResponseValidity(Android.Webkit.WebView view, string url)
        {
            if (_reference == null || !_reference.TryGetTarget(out var renderer))
            {
                return;
            }
            if (renderer.Element == null)
            {
                return;
            }

            var response = renderer.Element.HandleNavigationStartRequest(url);

            if (response.Cancel || response.OffloadOntoDevice)
            {
                Device.BeginInvokeOnMainThread(() =>
                {
                    if (response.OffloadOntoDevice)
                    {
                        AttemptToHandleCustomUrlScheme(view, url);
                    }

                    view.StopLoading();
                });
            }
        }
예제 #4
0
        public override bool ShouldOverrideUrlLoading(Android.Webkit.WebView view, string url)
        {
            if (DoesComponentWantToOverrideUrlLoading(view, url))
            {
                return(true);
            }

            return(base.ShouldOverrideUrlLoading(view, url));
        }
예제 #5
0
        public override bool ShouldOverrideUrlLoading(Android.Webkit.WebView view, IWebResourceRequest request)
        {
            if (DoesComponentWantToOverrideUrlLoading(view, request.Url.ToString()))
            {
                return(true);
            }

            return(base.ShouldOverrideUrlLoading(view, request));
        }
예제 #6
0
        public override void OnPageStarted(Android.Webkit.WebView view, string url, Bitmap favicon)
        {
            if (_reference == null || !_reference.TryGetTarget(out var renderer))
            {
                return;
            }
            if (renderer.Element == null)
            {
                return;
            }

            renderer.Element.Navigating = true;
        }
예제 #7
0
        public override void OnReceivedHttpError(Android.Webkit.WebView view, IWebResourceRequest request, WebResourceResponse errorResponse)
        {
            if (_reference == null || !_reference.TryGetTarget(out var renderer))
            {
                return;
            }
            if (renderer.Element == null)
            {
                return;
            }

            renderer.Element.HandleNavigationError(errorResponse.StatusCode, request.Url.ToString());
            renderer.Element.Navigating = false;
        }
예제 #8
0
        public override void OnReceivedSslError(Android.Webkit.WebView view, SslErrorHandler handler, SslError error)
        {
            if (_reference == null || !_reference.TryGetTarget(out var renderer))
            {
                return;
            }
            if (renderer.Element == null)
            {
                return;
            }

            if (HybridWebViewRenderer.IgnoreSslGlobally)
            {
                handler.Proceed();
            }

            else
            {
                handler.Cancel();
                renderer.Element.Navigating = false;
            }
        }
예제 #9
0
        private bool DoesComponentWantToOverrideUrlLoading(Android.Webkit.WebView view, string url)
        {
            if (_reference != null && _reference.TryGetTarget(out var renderer) && renderer.Element != null)
            {
                var response = renderer.Element.HandleNavigationStartRequest(url);

                if (response.Cancel || response.OffloadOntoDevice)
                {
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        if (response.OffloadOntoDevice)
                        {
                            AttemptToHandleCustomUrlScheme(view, url);
                        }

                        view.StopLoading();
                    });
                    return(true);
                }
            }
            return(false);
        }
 public ValueCallback(Android.Webkit.WebView wbView)
 {
     webView = wbView;
 }