public void StartUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSchemeTask) { try { var urlToFetch = urlSchemeTask.Request.Url.ToString(); if (!urlToFetch.Contains("favicon")) { var safeResponse = AsyncContext.Run(() => WebFetchService.FetchResourceAsync(urlToFetch)); var stream = new MemoryStream(safeResponse.Data); var response = new NSUrlResponse(urlSchemeTask.Request.Url, safeResponse.MimeType, (nint)stream.Length, null); var currentWebView = webView as HybridWebViewRenderer; currentWebView.SetCurrentPageVersion(safeResponse.CurrentNrsVersion); currentWebView.SetLatestPageVersion(safeResponse.LatestNrsVersion); urlSchemeTask.DidReceiveResponse(response); urlSchemeTask.DidReceiveData(NSData.FromStream(stream)); urlSchemeTask.DidFinish(); } } catch (Exception ex) { Logger.Error(ex); if (ex.InnerException != null) { var stream = new MemoryStream(); var response = new NSUrlResponse(urlSchemeTask.Request.Url, "text/html", 0, null); urlSchemeTask.DidReceiveResponse(response); urlSchemeTask.DidReceiveData(NSData.FromStream(stream)); urlSchemeTask.DidFinish(); } } }
public void StartUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSchemeTask) { try { var urlToFetch = urlSchemeTask.Request.Url.ToString(); if (!urlToFetch.Contains("favicon")) { var safeResponse = AsyncContext.Run(() => WebFetchService.FetchResourceAsync(urlToFetch)); var stream = new MemoryStream(safeResponse.Data); var response = new NSUrlResponse(urlSchemeTask.Request.Url, safeResponse.MimeType, (nint)stream.Length, null); urlSchemeTask.DidReceiveResponse(response); urlSchemeTask.DidReceiveData(NSData.FromStream(stream)); urlSchemeTask.DidFinish(); } } catch (Exception ex) { Logger.Error(ex); if (ex.InnerException != null) { var urlToFetch = urlSchemeTask.Request.Url.ToString(); var stream = new MemoryStream(); var mimeType = MimeMapping.MimeUtility.GetMimeMapping(urlToFetch) ?? "text/html"; var response = new NSUrlResponse(urlSchemeTask.Request.Url, mimeType, 0, null); urlSchemeTask.DidReceiveResponse(response); urlSchemeTask.DidReceiveData(NSData.FromStream(stream)); urlSchemeTask.DidFinish(); } } }
public void StartUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSchemeTask) { var responseBytes = GetResponseBytes(urlSchemeTask.Request.Url.AbsoluteString, out var contentType, out var statusCode); var response = new NSUrlResponse(urlSchemeTask.Request.Url, contentType, responseBytes.Length, null); urlSchemeTask.DidReceiveResponse(response); urlSchemeTask.DidReceiveData(NSData.FromArray(responseBytes)); urlSchemeTask.DidFinish(); }
public void StartUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSchemeTask) { var urlToCheck = $"{urlSchemeTask.Request.Url.Scheme}:{urlSchemeTask.Request.Url.BaseUrl}"; if (!_urls.Contains(urlToCheck)) { return; } var action = _urlActions[urlToCheck]; var actionResult = action.Invoke(); urlSchemeTask.DidReceiveData(NSData.FromString(actionResult)); urlSchemeTask.DidFinish(); }
public void StartUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSchemeTask) { var responseBytes = GetResponseBytes(urlSchemeTask.Request.Url.AbsoluteString, out var contentType, statusCode: out var statusCode); if (statusCode == 200) { using (var dic = new NSMutableDictionary <NSString, NSString>()) { dic.Add((NSString)"Content-Length", (NSString)(responseBytes.Length.ToString(CultureInfo.InvariantCulture))); dic.Add((NSString)"Content-Type", (NSString)contentType); // Disable local caching. This will prevent user scripts from executing correctly. dic.Add((NSString)"Cache-Control", (NSString)"no-cache, max-age=0, must-revalidate, no-store"); using var response = new NSHttpUrlResponse(urlSchemeTask.Request.Url, statusCode, "HTTP/1.1", dic); urlSchemeTask.DidReceiveResponse(response); } urlSchemeTask.DidReceiveData(NSData.FromArray(responseBytes)); urlSchemeTask.DidFinish(); } }
/// <summary> /// Starts a task that handles the retrieval of the resource. /// </summary> /// <param name="webView">The webview to use.</param> /// <param name="urlSchemeTask">The scheme task status object.</param> public void StartUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSchemeTask) { var url = urlSchemeTask.Request.Url; var stream = this.requestHandler(url.AbsoluteString, out string contentType, out Encoding encoding); NSDictionary headers = new NSMutableDictionary(); headers.SetValueForKey((NSString)contentType, (NSString)"Content-Type"); headers.SetValueForKey((NSString)"no-cache", (NSString)"Cache-Control"); var response = new NSHttpUrlResponse(url, stream != null ? 200 : 404, "HTTP/1.1", headers); urlSchemeTask.DidReceiveResponse(response); if (stream != null) { urlSchemeTask.DidReceiveData(NSData.FromStream(stream)); } urlSchemeTask.DidFinish(); }
public void StopUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSchemeTask) { }
public void StopUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSchemeTask) { throw new NotImplementedException(); }