public override WebResourceResponse ShouldInterceptRequest(WebView view, IWebResourceRequest request)
        {
            if (request.Url.Scheme == Uri.UriSchemeFile)
                return null;

            if (SkipLoading(request.Url.LastPathSegment))
                return null;

            var baseResponse = base.ShouldInterceptRequest(view, request);

            try
            {
                var result = Task.Run(async () =>
                {
                    using (var c = new HttpClient { Timeout = TimeSpan.FromSeconds(TimeOut) })
                    {
                        var response = await c.GetAsync(request.Url.ToString());
                        var content = await response.Content.ReadAsStreamAsync();
                        return new WebResourceResponse(baseResponse.MimeType, "UTF-8", (int)response.StatusCode, response.ReasonPhrase, null, content);
                    }
                }).Result;
                
                return result;
            }
            catch (AggregateException e)
            {
                return baseResponse;
            }
        }
		public override WebResourceResponse ShouldInterceptRequest (WebView view, IWebResourceRequest request)
		{
			var uri = new Uri (request.Url.ToString ());
			int index;

			if ((index = related.IndexOf (uri)) != -1) {
				var part = related[index] as MimePart;

				if (part != null) {
					var mimeType = part.ContentType.MimeType;
					var stream = part.ContentObject.Open ();
					var charset = part.ContentType.Charset;

					return new WebResourceResponse (mimeType, charset, stream);
				}
			}

			return base.ShouldInterceptRequest (view, request);
		}
		public override bool ShouldOverrideUrlLoading (WebView view, IWebResourceRequest request)
		{
			var url = request.Url.ToString() ;

			EventHandler<WebViewLocaitonChangedEventArgs> handler =
				WebViewLocaitonChanged;

			if (null != handler) {
				handler (this,
					new WebViewLocaitonChangedEventArgs {
						CommandString = url
					});

				if (url.Contains ("callfrompage://Hi")) {
					return false;
				}

			}



			return base.ShouldOverrideUrlLoading (view, request );

		}
示例#4
0
 public override void OnReceivedHttpError(WebView view, IWebResourceRequest request, WebResourceResponse errorResponse)
 {
     base.OnReceivedHttpError(view, request, errorResponse);
 }
示例#5
0
 public override bool ShouldOverrideUrlLoading(WebView view, IWebResourceRequest request)
 {
     view.LoadUrl((string)request.Url);
     return(true);
 }
示例#6
0
 // For API level 24 and later
 public override bool ShouldOverrideUrlLoading(WebView view, IWebResourceRequest request)
 {
     view.LoadUrl(request.Url.ToString());
     return(false);
 }
示例#7
0
        // NOTE: pulled fix from this unmerged PR - https://github.com/SKLn-Rad/Xam.Plugin.Webview/pull/104
        public override bool ShouldOverrideUrlLoading(Android.Webkit.WebView view, IWebResourceRequest request)
        {
            if ((view as WebViewEx).Disposed)
            {
                return(base.ShouldOverrideUrlLoading(view, request));
            }

            if (!CheckResponseValidity(view, request.Url.ToString()))
            {
                return(true);
            }

            if (Reference == null || !Reference.TryGetTarget(out FormsWebViewRenderer renderer) || renderer?.Element?.BaseUrl == null)
            {
                return(base.ShouldOverrideUrlLoading(view, request));
            }

            if (!request.Url.ToString().ToLower().StartsWith(renderer.Element.BaseUrl.ToLower()) || FormsWebView.GlobalRegisteredHeaders.Count == 0)
            {
                return(base.ShouldOverrideUrlLoading(view, request));
            }

            if (request.RequestHeaders != null)
            {
                // Is recursive request? (check for our custom headers)
                bool needCustomHeader = false;
                foreach (var header in FormsWebView.GlobalRegisteredHeaders)
                {
                    if (!request.RequestHeaders.ContainsKey(header.Key))
                    {
                        needCustomHeader = true;
                        break;
                    }
                }

                if (!needCustomHeader)
                {
                    return(false);
                }
            }

            // Add Additional headers
            var headers = new Dictionary <string, string>();

            if (request.RequestHeaders != null)
            {
                foreach (var header in request.RequestHeaders)
                {
                    headers.Add(header.Key, header.Value);
                }
            }

            foreach (var header in FormsWebView.GlobalRegisteredHeaders)
            {
                if (!headers.ContainsKey(header.Key))
                {
                    headers.Add(header.Key, header.Value);
                }
            }

            view.LoadUrl(request.Url.ToString(), headers);

            return(true);
            //return base.ShouldOverrideUrlLoading(view, request);
        }
 public override WebResourceResponse ShouldInterceptRequest(WebView view, IWebResourceRequest request)
 {
     return(base.ShouldInterceptRequest(view, request));
 }
示例#9
0
 public override bool ShouldOverrideUrlLoading(Android.Webkit.WebView view, IWebResourceRequest request)
 {
     return(_renderer?.ShouldOverrideUrlLoading(view, request.Url.ToString()) ?? base.ShouldOverrideUrlLoading(view, request));
 }
 public override WebResourceResponse ShouldInterceptRequest(WebView view, IWebResourceRequest request)
 {
     return(request.HasGesture ? base.ShouldInterceptRequest(view, request) : null);
 }
示例#11
0
 // API 21+
 public override void OnReceivedError(WebView view, IWebResourceRequest request, WebResourceError error)
 {
     ConsoleLog(view, error.ToString());
     base.OnReceivedError(view, request, error);
 }
示例#12
0
        public override void OnReceivedError(WebView view, IWebResourceRequest request, WebResourceError error)
        {
            try
            {
                base.OnReceivedError(view, request, error);

                string TextError = Application.Context.GetString(Resource.String.Lbl_Error_Code) + " ";

                switch (error.ErrorCode)
                {
                case ClientError.BadUrl:
                    TextError = ErrorBadUrl.ToString();
                    break;

                case ClientError.Connect:
                    TextError += ErrorConnect.ToString();
                    break;

                case ClientError.FailedSslHandshake:
                    TextError += ErrorFailedSslHandshake.ToString();
                    break;

                case ClientError.File:
                    TextError += ErrorFile.ToString();
                    break;

                case ClientError.FileNotFound:
                    TextError += ErrorFileNotFound.ToString();
                    break;

                case ClientError.HostLookup:
                    TextError += ErrorHostLookup.ToString();
                    break;

                case ClientError.ProxyAuthentication:
                    TextError += ErrorProxyAuthentication.ToString();
                    break;

                case ClientError.Timeout:
                    TextError += ErrorTimeout.ToString();
                    break;

                case ClientError.TooManyRequests:
                    TextError += ErrorTooManyRequests.ToString();
                    break;

                case ClientError.Unknown:
                    TextError += ErrorUnknown.ToString();
                    break;

                case ClientError.UnsafeResource:
                    TextError += ErrorUnsafeResource.ToString();
                    break;

                case ClientError.UnsupportedScheme:
                    TextError += ErrorUnsupportedAuthScheme.ToString();
                    break;

                case ClientError.Io:
                    TextError += ErrorIo.ToString();
                    break;
                }

                OnPageEventReceivedError?.Invoke(view, request, error, TextError);
            }
            catch (Exception e)
            {
                Crashes.TrackError(e);
            }
        }
        public override WebResourceResponse ShouldInterceptRequest(WebView view, IWebResourceRequest request)
        {
            try
            {
                Logger.Info($"Requested Url: {request.Url.ToString()}");
                var urlToFetch    = request.Url.ToString().Replace(Constants.BufferText, string.Empty);
                var isHttpRequest = request.Url.Scheme == "https";
                if (isHttpRequest && !urlToFetch.Contains("favicon"))
                {
                    var requestHeaders = request.RequestHeaders;

                    if (requestHeaders.ContainsKey("Range"))
                    {
                        var options = new WebFetchOptions
                        {
                            Range = RequestHelpers.RangeStringToArray(requestHeaders["Range"])
                        };

                        var task         = WebFetchService.FetchResourceAsync(urlToFetch, options);
                        var safeResponse = task.WaitAndUnwrapException();

                        var stream   = new MemoryStream(safeResponse.Data);
                        var response = new WebResourceResponse(safeResponse.MimeType, "UTF-8", stream);
                        response.SetStatusCodeAndReasonPhrase(206, "Partial Content");
                        response.ResponseHeaders = new Dictionary <string, string>
                        {
                            { "Accept-Ranges", "bytes" },
                            { "content-type", safeResponse.MimeType },
                            { "Content-Range", safeResponse.Headers["Content-Range"] },
                            { "Content-Length", safeResponse.Headers["Content-Length"] },
                        };
                        if (_renderer.TryGetTarget(out HybridWebViewRenderer webviewRenderer))
                        {
                            webviewRenderer.SetCurrentPageVersion(safeResponse.CurrentNrsVersion);
                            webviewRenderer.SetLatestPageVersion(safeResponse.LatestNrsVersion);
                        }
                        return(response);
                    }
                    else
                    {
                        var safeResponse = WebFetchService.FetchResourceAsync(urlToFetch).Result;
                        var stream       = new MemoryStream(safeResponse.Data);
                        var response     = new WebResourceResponse(safeResponse.MimeType, "UTF-8", stream);
                        if (_renderer.TryGetTarget(out HybridWebViewRenderer webviewRenderer))
                        {
                            webviewRenderer.SetCurrentPageVersion(safeResponse.CurrentNrsVersion);
                            webviewRenderer.SetLatestPageVersion(safeResponse.LatestNrsVersion);
                        }
                        return(response);
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);

                if (ex.InnerException != null)
                {
                    using (var stream = new MemoryStream())
                    {
                        var response = new WebResourceResponse("text/html", "UTF-8", stream);
                        response.SetStatusCodeAndReasonPhrase(404, "Not Found");
                        return(response);
                    }
                }
            }
            return(base.ShouldInterceptRequest(view, request));
        }
        public override bool ShouldOverrideUrlLoading(WebView view, IWebResourceRequest request) //vt. Android.Webkit doku
        {
            view.LoadUrl(request.Url.ToString());                                                //sebview vahetab lehte ilma välisesse browserisse minemast

            return(base.ShouldOverrideUrlLoading(view, request));
        }
示例#15
0
 public override bool ShouldOverrideUrlLoading(WebView view, IWebResourceRequest request)
 {
     //TODO: check for external links and do something else with them
     return(base.ShouldOverrideUrlLoading(view, request));
 }
示例#16
0
 public override void OnReceivedError(WebView view, IWebResourceRequest request, WebResourceError error)
 {
     base.OnReceivedError(view, request, error);
 }
 public override void OnReceivedHttpError(Android.Webkit.WebView view, IWebResourceRequest request, WebResourceResponse errorResponse)
 {
     base.OnReceivedHttpError(view, request, errorResponse);
     Android.Util.Log.Error(logTag, $"OnReceivedError: {errorResponse.ReasonPhrase}, Url:{request.Url.EncodedSchemeSpecificPart}");
 }
示例#18
0
        public override WebResourceResponse ShouldInterceptRequest(Android.Webkit.WebView view, IWebResourceRequest request)
        {
            if (Reference == null || !Reference.TryGetTarget(out FormsWebViewRenderer renderer))
            {
                goto EndShouldInterceptRequest;
            }
            if (renderer.Element == null)
            {
                goto EndShouldInterceptRequest;
            }

            string url      = request.Url.ToString();
            var    response = renderer.Element.HandleNavigationStartRequest(url);

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

                    view.StopLoading();
                });
            }

EndShouldInterceptRequest:
            return(base.ShouldInterceptRequest(view, request));
        }
        public override void OnReceivedError(WebView view, IWebResourceRequest request, WebResourceError error)
        {
            base.OnReceivedError(view, request, error);

            App.GemWriteLine("JWChineseWebViewClient.OnReceivedError", error.Description);
        }
示例#20
0
 public override bool ShouldOverrideUrlLoading(WebView view, IWebResourceRequest request)
 {
     return(false);
 }
示例#21
0
        public override void OnReceivedError(WebView view, IWebResourceRequest request, WebResourceError error)
        {
            base.OnReceivedError(view, request, error);

            System.Diagnostics.Debug.WriteLine("HeatMapWebClient error: " + error.Description);
        }
 // api 24+
 public override bool ShouldOverrideUrlLoading(WView view, IWebResourceRequest request)
 => SendNavigatingCanceled(request?.Url?.ToString());
示例#23
0
 public override bool ShouldOverrideUrlLoading(Android.Webkit.WebView view, IWebResourceRequest request)
 {
     try
     {
         var loadIntent = new Intent(Intent.ActionView);
         loadIntent.SetData(request.Url);
         view.Context.StartActivity(loadIntent);
         return(true);
     }
     catch
     {
         return(base.ShouldOverrideUrlLoading(view, request));
     }
 }
 public override bool ShouldOverrideUrlLoading(WebView view, IWebResourceRequest request)
 {
     Methods.App.OpenbrowserUrl(Activity, request.Url.ToString());
     view.LoadDataWithBaseURL(null, Activity.DataWebHtml, "text/html", "UTF-8", null);
     return(true);
 }
示例#25
0
 public override void OnReceivedError(Android.Webkit.WebView view, IWebResourceRequest request, WebResourceError error)
 {
     base.OnReceivedError(view, request, error);
     _taskCompletionSource.SetResult(new ToFileResult(true, error.Description));
 }
示例#26
0
        //************************************************************************************************************************
        // ADDED TO DECIDE AND HANDLE CONTENTTYPE (application/pdf) BY LOADING CONTENT IN SEPARATE HTTPCLIENT BEFORE SHOWING IN WEBVIEW
        /// <summary>
        /// Shoulds the intercept request. Raise OnContentTypeLoaded to webview with content type
        /// </summary>
        /// <returns>The intercept request.</returns>
        /// <param name="view">View.</param>
        /// <param name="request">Request.</param>
        public override WebResourceResponse ShouldInterceptRequest(Android.Webkit.WebView view, IWebResourceRequest request)
        {
            if (Reference == null || !Reference.TryGetTarget(out FormsWebViewRenderer renderer))
            {
                return(null);
            }
            if (renderer.Element == null)
            {
                return(null);
            }

            if (request == null || request.Url == null)
            {
                return(null);
            }

            //It seems that post methods doesn't get captured by webviews OnPageStarted method. Needs to handle this manually to raise WhenNavigationStarted in WebViewPage
            if (!string.IsNullOrEmpty(request.Method) && request.Method.Equals("POST"))
            {
                renderer.Element.HandleNavigationStartRequest(request.Url.ToString());
            }

            return(base.ShouldInterceptRequest(view, request));
        }
示例#27
0
 public override void OnReceivedHttpError(Android.Webkit.WebView view, IWebResourceRequest request, WebResourceResponse errorResponse)
 {
     base.OnReceivedHttpError(view, request, errorResponse);
     _taskCompletionSource.SetResult(new ToFileResult(true, errorResponse.ReasonPhrase));
 }
示例#28
0
 public override WebResourceResponse ShouldInterceptRequest(Android.Webkit.WebView view, IWebResourceRequest request)
 {
     //if (request.Method == "POST")
     //{
     //    view.StopLoading();
     //}
     return(base.ShouldInterceptRequest(view, request));
 }
示例#29
0
 public override void OnReceivedError(WebView view, IWebResourceRequest request, WebResourceError error)
 {
     base.OnReceivedError(view, request, error);
     Toast.MakeText(context, "Error loading " + error.ErrorCode + " " + error.Description, ToastLength.Long);
 }
 public override bool ShouldOverrideUrlLoading(WebView view, IWebResourceRequest request)
 {
     return(base.ShouldOverrideUrlLoading(view, request));
 }
示例#31
0
 public override bool ShouldOverrideUrlLoading(Android.Webkit.WebView view, IWebResourceRequest request)
 {
     return(((NavigationRequestedDelegate)Element.InvokeEvent(WebViewEventType.NavigationRequested, new NavigationRequestedDelegate(Element, request.Url.ToString()))).Cancel);
 }
		public override WebResourceResponse ShouldInterceptRequest (Android.Webkit.WebView view, IWebResourceRequest request)
		{
			Console.WriteLine ("[Custom Delegate] Url: {0}", request.Url);

			return base.ShouldInterceptRequest (view, request);
		}
 public override void OnReceivedError(Android.Webkit.WebView view, IWebResourceRequest request, WebResourceError error)
 {
     LoadError?.Invoke(error.Description);
     base.OnReceivedError(view, request, error);
 }
            public override WebResourceResponse ShouldInterceptRequest(WebView view, IWebResourceRequest request)
            {
                var s = request.RequestHeaders.ToList();

                return(base.ShouldInterceptRequest(view, request));
            }
 public override void OnReceivedError(Android.Webkit.WebView view, IWebResourceRequest request, WebResourceError error)
 {
     base.OnReceivedError(view, request, error);
     Android.Util.Log.Error(logTag, $"OnReceivedError: {error.Description}, Url:{request.Url.Path}");
 }