protected override bool ShouldStartLoad(WKWebView webView, WKNavigationAction navigationAction) { // F*****g BitBucket and their horrible user interface. if (ForbiddenRoutes.Any(navigationAction.Request.Url.AbsoluteString.StartsWith)) { AlertDialogService.ShowAlert("Invalid Request", "Sorry, due to restrictions, you can not sign-up for a new account in CodeBucket."); return(false); } //We're being redirected to our redirect URL so we must have been successful if (navigationAction.Request.Url.Host == "codebucket") { var queryParams = navigationAction .Request.Url.Query.Split('&') .Select(x => x.Split('=').Select(Uri.EscapeDataString).ToArray()) .Where(x => x.Length >= 2) .ToDictionary(x => x[0], x => x[1]); if (queryParams.TryGetValue("code", out string code)) { ViewModel.LoginCommand.Execute(code).LoggedCatch(this).Subscribe(); return(false); } } //if (navigationAction.Request.Url.Path.StartsWith("/socialauth", StringComparison.Ordinal)) //{ // var safari = new SFSafariViewController(new NSUrl(ViewModel.LoginUrl)); // PresentViewController(safari, true, null); // return false; //} return(base.ShouldStartLoad(webView, navigationAction)); }
protected override bool ShouldStartLoad(WKWebView webView, WKNavigationAction navigationAction) { try { //We're being redirected to our redirect URL so we must have been successful if (navigationAction.Request.Url.Host == "dillonbuchanan.com") { var code = navigationAction.Request.Url.Query.Split('=')[1]; ViewModel.Login(code); return(false); } if (navigationAction.Request.Url.AbsoluteString.StartsWith("https://github.com/join")) { Mvx.Resolve <IAlertDialogService>().Alert("Error", "Sorry, due to restrictions, creating GitHub accounts cannot be done in CodeHub."); return(false); } return(base.ShouldStartLoad(webView, navigationAction)); } catch { Mvx.Resolve <IAlertDialogService>().Alert("Error Logging in!", "CodeHub is unable to login you in due to an unexpected error. Please try again."); return(false); } }
public override void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action <WKNavigationActionPolicy> decisionHandler) { if (Reference == null || !Reference.TryGetTarget(out FormsWebViewRenderer renderer)) { return; } if (renderer.Element == null) { return; } var response = renderer.Element.HandleNavigationStartRequest(navigationAction.Request.Url.ToString()); if (response.Cancel || response.OffloadOntoDevice) { if (response.OffloadOntoDevice) { AttemptOpenCustomUrlScheme(navigationAction.Request.Url); } decisionHandler(WKNavigationActionPolicy.Cancel); } else { decisionHandler(WKNavigationActionPolicy.Allow); renderer.Element.Navigating = true; } }
protected override bool ShouldStartLoad(WKWebView webView, WKNavigationAction navigationAction) { var url = navigationAction.Request.Url; if (url.Scheme.Equals("app")) { var func = url.Host; if (func.Equals("ready")) { _domLoaded = true; foreach (var e in _toBeExecuted) { Web.EvaluateJavaScript(e, null); } } else if (func.Equals("comment")) { var commentModel = _serializationService.Deserialize <JavascriptCommentModel>(UrlDecode(url.Fragment)); PromptForComment(commentModel); } return(false); } return(base.ShouldStartLoad(webView, navigationAction)); }
protected override bool ShouldStartLoad(WKWebView webView, WKNavigationAction navigationAction) { try { //We're being redirected to our redirect URL so we must have been successful if (navigationAction.Request.Url.Host == "dillonbuchanan.com") { var code = navigationAction.Request.Url.Query.Split('=')[1]; ViewModel.Login(code); return false; } if (navigationAction.Request.Url.AbsoluteString.StartsWith("https://github.com/join")) { Mvx.Resolve<IAlertDialogService>().Alert("Error", "Sorry, due to restrictions, creating GitHub accounts cannot be done in CodeHub."); return false; } return base.ShouldStartLoad(webView, navigationAction); } catch { Mvx.Resolve<IAlertDialogService>().Alert("Error Logging in!", "CodeHub is unable to login you in due to an unexpected error. Please try again."); return false; } }
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:") || url.ToString().StartsWith("Tel:")) { //decisionHandler(WKNavigationActionPolicy.Allow); UIApplication.SharedApplication.OpenUrl(url); } }
public override bool ShouldStartLoad(WKWebView webView, WKNavigationAction navigationAction) { var url = navigationAction.Request.Url; if (url != null && url.Scheme.Equals("app")) { var func = url.Host; if (func.Equals("comment")) { var q = System.Web.HttpUtility.ParseQueryString(url.Query); var commentModel = new JavascriptCommentModel { LineFrom = ToNullableInt(q["lineFrom"]), LineTo = ToNullableInt(q["lineTo"]) }; PromptForComment(commentModel); } return(false); } return(base.ShouldStartLoad(webView, navigationAction)); }
public void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action <WKNavigationActionPolicy> decisionHandler) { if (_handler == null) { return; } var navEvent = WebNavigationEvent.NewPage; var navigationType = navigationAction.NavigationType; switch (navigationType) { case WKNavigationType.LinkActivated: navEvent = WebNavigationEvent.NewPage; if (navigationAction.TargetFrame == null) { webView?.LoadRequest(navigationAction.Request); } break; case WKNavigationType.FormSubmitted: navEvent = WebNavigationEvent.NewPage; break; case WKNavigationType.BackForward: navEvent = _handler.CurrentNavigationEvent; break; case WKNavigationType.Reload: navEvent = WebNavigationEvent.Refresh; break; case WKNavigationType.FormResubmitted: navEvent = WebNavigationEvent.NewPage; break; case WKNavigationType.Other: navEvent = WebNavigationEvent.NewPage; break; } _lastEvent = navEvent; var virtualView = _handler.VirtualView; if (virtualView == null) { return; } var request = navigationAction.Request; var lastUrl = request.Url.ToString(); bool cancel = virtualView.Navigating(navEvent, lastUrl); _handler.PlatformView?.UpdateCanGoBackForward(virtualView); decisionHandler(cancel ? WKNavigationActionPolicy.Cancel : WKNavigationActionPolicy.Allow); }
protected override bool ShouldStartLoad(WKWebView webView, WKNavigationAction navigationAction) { try { //We're being redirected to our redirect URL so we must have been successful if (navigationAction.Request.Url.Host == "dillonbuchanan.com") { var queryParameters = navigationAction.Request.Url.Query.Split('&'); var code = queryParameters.FirstOrDefault(x => x.StartsWith("code=", StringComparison.OrdinalIgnoreCase)); var codeValue = code?.Replace("code=", String.Empty); ViewModel.LoginCommand.ExecuteNow(codeValue); return(false); } if (navigationAction.Request.Url.AbsoluteString.StartsWith("https://github.com/join")) { _alertDialogService.Alert("Error", "Sorry, due to restrictions, creating GitHub accounts cannot be done in CodeHub."); return(false); } return(base.ShouldStartLoad(webView, navigationAction)); } catch { _alertDialogService.Alert("Error Logging in!", "CodeHub is unable to login you in due to an unexpected error. Please try again."); return(false); } }
public override void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action <WKNavigationActionPolicy> decisionHandler) { var requestUrl = navigationAction.Request?.Url.ToUri(); if (this.Log().IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug)) { this.Log().Debug($"WKNavigationDelegate.DecidePolicy: NavigationType: {navigationAction.NavigationType} Request:{requestUrl} TargetRequest: {navigationAction.TargetFrame?.Request}"); } var scheme = requestUrl.Scheme.ToLower(); // Note that the "file" scheme is not officially supported by the UWP WebView (https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.webview.unsupportedurischemeidentified?view=winrt-19041#remarks). // We have to support it here for anchor navigation (as long as https://github.com/unoplatform/uno/issues/2998 is not resolved). var isUnsupportedScheme = scheme != "http" && scheme != "https" && scheme != "file"; if (isUnsupportedScheme) { bool cancelled = _unoWKWebView.OnUnsupportedUriSchemeIdentified(requestUrl); decisionHandler(cancelled ? WKNavigationActionPolicy.Cancel : WKNavigationActionPolicy.Allow); return; } // The WKWebView doesn't raise navigation event for anchor navigation. // When we detect anchor navigation, we must raise the events (NavigationStarting & NavigationFinished) ourselves. var isAnchorNavigation = GetIsAnchorNavigation(); if (isAnchorNavigation) { bool cancelled = _unoWKWebView.OnStarted(requestUrl, stopLoadingOnCanceled: false); decisionHandler(cancelled ? WKNavigationActionPolicy.Cancel : WKNavigationActionPolicy.Allow); if (!cancelled) { _unoWKWebView.OnNavigationFinished(requestUrl); } return; } // For all other cases, we allow the navigation. This will results in other WKNavigationDelegate methods being called. decisionHandler(WKNavigationActionPolicy.Allow); bool GetIsAnchorNavigation() { // If we navigate to the exact same page but with a different location (using anchors), the native control will not notify us of // any navigation. We need to create this notification to indicate that the navigation worked. // To detect an anchor navigation, both the previous and new urls need to match on the left part of the anchor indicator ("#") // AND the new url needs to have content on the right of the anchor indicator. var currentUrlParts = _unoWKWebView._urlLastNavigation?.AbsoluteUrl?.ToString().Split(new string[] { "#" }, StringSplitOptions.None); var newUrlParts = requestUrl?.AbsoluteUri?.ToString().Split(new string[] { "#" }, StringSplitOptions.None); return(currentUrlParts?.Length > 0 && newUrlParts?.Length > 1 && currentUrlParts[0].Equals(newUrlParts[0])); } }
public override void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action <WKNavigationActionPolicy> decisionHandler) { if (navigationAction.TargetFrame !.MainFrame) { _currentUri = navigationAction.Request.Url; } decisionHandler(WKNavigationActionPolicy.Allow); }
public override void DecidePolicy ( WKWebView webView, WKNavigationAction navigationAction, Action <WKNavigationActionPolicy> decisionHandler ) { #if DEBUG StringBuilder sb = new StringBuilder(); sb.AppendLine($"WKWebViewNavigationDelegate.DecidePolicy "); sb.AppendLine($" webView.Url.AbsoluteString = {webView.Url.AbsoluteString}"); sb.AppendLine($" navigationAction?.Request?.Url = {navigationAction?.Request?.Url}"); sb.AppendLine($" navigationAction?.NavigationType = {navigationAction?.NavigationType}"); System.Diagnostics.Debug.WriteLine(sb.ToString()); #endif Uri uri = new Uri(webView.Url.AbsoluteString); string fragment = uri.Fragment; if ( fragment.Contains("access_token") || fragment.Contains("state") || fragment.Contains("expires_in") || fragment.Contains("error") ) { IDictionary <string, string> fragments = WebEx.FormDecode(uri.Fragment); Account account = new Account ( "", new Dictionary <string, string>(fragments) ); controller.authenticator.OnSucceeded(account); } else if ( fragment.Contains("code") ) { throw new NotImplementedException("code - Explicit/Server"); } if (navigationAction.NavigationType == WKNavigationType.LinkActivated) { UIApplication.SharedApplication.OpenUrl(navigationAction.Request.Url); decisionHandler(WKNavigationActionPolicy.Cancel); return; } // Navigation Allowed? // page will not load without this one! decisionHandler(WKNavigationActionPolicy.Allow); }
public WKWebView CreateWebView( WKWebView webView, WKWebViewConfiguration configuration, WKNavigationAction navigationAction, WKWindowFeatures windowFeatures) { UIApplication.SharedApplication.OpenUrl(navigationAction.Request.Url); return(null); }
public override void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action <WKNavigationActionPolicy> decisionHandler) { System.Console.WriteLine("=========================== DecidePolicy"); var ret = _webView.Get()?.ShouldStartLoad(webView, navigationAction) ?? true; decisionHandler(ret ? WKNavigationActionPolicy.Allow : WKNavigationActionPolicy.Cancel); }
public override void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action <WKNavigationActionPolicy> decisionHandler) { WKNavigationActionPolicy policy = WKNavigationActionPolicy.Cancel; if (!finishedDelegate(navigationAction.Request.Url.AbsoluteString, false)) { policy = WKNavigationActionPolicy.Allow; } decisionHandler(policy); }
protected override bool ShouldStartLoad(WKWebView webView, WKNavigationAction navigationAction) { if (!navigationAction.Request.Url.AbsoluteString.StartsWith("file://", System.StringComparison.Ordinal)) { ViewModel.GoToLinkCommand.Execute(navigationAction.Request.Url.AbsoluteString); return false; } return base.ShouldStartLoad(webView, navigationAction); }
protected override bool ShouldStartLoad(WKWebView webView, WKNavigationAction navigationAction) { if (!navigationAction.Request.Url.AbsoluteString.StartsWith("file://", System.StringComparison.Ordinal)) { ViewModel.GoToLinkCommand.Execute(navigationAction.Request.Url.AbsoluteString); return(false); } return(base.ShouldStartLoad(webView, navigationAction)); }
public virtual void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action <WKNavigationActionPolicy> decisionHandler) { if (navigationAction.Request.Url != null && navigationAction.Request.Url != Url) { decisionHandler(WKNavigationActionPolicy.Cancel); Delegate?.AuthenticationControllerDidAuthenticate(this); return; } decisionHandler(WKNavigationActionPolicy.Allow); }
public override void DecidePolicy(WebKit.WKWebView webView, WKNavigationAction navigationAction, Action <WKNavigationActionPolicy> decisionHandler) { if (wvp.OnNavigationStarting(new Uri(navigationAction.Request.Url.AbsoluteString))) { decisionHandler(WKNavigationActionPolicy.Cancel); } else { decisionHandler(WKNavigationActionPolicy.Allow); } }
public void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action <WKNavigationActionPolicy> decisionHandler) { if (UIApplication.SharedApplication.CanOpenUrl(navigationAction.Request.Url)) { UIApplication.SharedApplication.OpenUrl(navigationAction.Request.Url); decisionHandler(WKNavigationActionPolicy.Cancel); } else { decisionHandler(WKNavigationActionPolicy.Allow); } }
public override void DecidePolicy(WKWebView view, WKNavigationAction navAction, Action <WKNavigationActionPolicy> handler) { if (navAction.NavigationType == WKNavigationType.LinkActivated) { handler?.Invoke(WKNavigationActionPolicy.Cancel); view.BeginInvokeOnMainThread(() => UIApplication.SharedApplication.OpenUrl(navAction.Request.Url)); } else { handler?.Invoke(WKNavigationActionPolicy.Allow); } }
public void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action <WKNavigationActionPolicy> decisionHandler) { if (navigationAction.Request?.Url is NSUrl url) { if (url.Scheme == new NSUrl(_options.EndUrl).Scheme) { Console.WriteLine("Policy Decision: Handled callback with URL {0}", url); ActivityMediator.Instance.Send(url.AbsoluteString); } else if (_options.RestartFlowRoutes is string[] restartRoutes && url.Host == new NSUrl(_options.StartUrl).Host && string.IsNullOrEmpty(url.Query) && restartRoutes.Contains(url.Path, StringComparer.OrdinalIgnoreCase)) { Console.WriteLine("Policy Decision: We hit a redirect route, starting a new session {0}", url); if (_options.Headers != null) { var newSessionRequest = UpdateHeaders(new NSMutableUrlRequest(new NSUrl(_options.StartUrl)), _options.Headers.ToDictionary(k => k.Key.ToString(), v => v.Value.ToString())); if (newSessionRequest != null) { WebView.LoadRequest(newSessionRequest); } } } else if (_options.ViewableUrls != null && _options.ViewableUrls.Any(x => new NSUrl(x).IsEqual(url))) { if (UIApplication.SharedApplication.CanOpenUrl(url)) { Console.WriteLine("Policy Decision: We hit other URL, open in Safari"); UIApplication.SharedApplication.OpenUrl(url); } decisionHandler(WKNavigationActionPolicy.Cancel); return; } else { // Inject custom headers into HTTP request. Currently only support GET request, due to https://forums.developer.apple.com/thread/125753 if (_options.Headers != null && navigationAction.Request.HttpMethod == "GET" && (navigationAction.Request.Url.Host == new NSUrl(_options.StartUrl).Host || (_options.DetourUrl != null && navigationAction.Request.Url.Host == new NSUrl(_options.DetourUrl).Host))) { var request = UpdateHeaders(navigationAction.Request, _options.Headers.ToDictionary(k => k.Key.ToString(), v => v.Value.ToString())); if (request != null) { WebView.LoadRequest(request); decisionHandler(WKNavigationActionPolicy.Cancel); return; } } } }
public override bool ShouldStartLoad(WKWebView webView, WKNavigationAction navigationAction) { var url = navigationAction.Request.Url.AbsoluteString; if (!url.StartsWith("file://", StringComparison.Ordinal)) { var webBrowser = new WebBrowserViewController(url); PresentViewController(webBrowser, true, null); return(false); } return(base.ShouldStartLoad(webView, navigationAction)); }
public void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action <WKNavigationActionPolicy> decisionHandler) { // Load the "about.html" file locally inside the web view but open the links in there in external browser. if (navigationAction.Request.Url.IsFileUrl) { decisionHandler(WKNavigationActionPolicy.Allow); } else { decisionHandler(WKNavigationActionPolicy.Cancel); UIApplication.SharedApplication.OpenUrl(navigationAction.Request.Url); } }
public override void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action <WKNavigationActionPolicy> decisionHandler) { NavigationRequestedDelegate res = (NavigationRequestedDelegate)Element.InvokeEvent(WebViewEventType.NavigationRequested, new NavigationRequestedDelegate(Element, navigationAction.Request.Url.ToString())); if (res.Cancel) { decisionHandler(WKNavigationActionPolicy.Cancel); } else { decisionHandler(WKNavigationActionPolicy.Allow); } }
public override void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action <WKNavigationActionPolicy> decisionHandler) { if (Reference == null || !Reference.TryGetTarget(out FormsWebViewRenderer renderer)) { return; } if (renderer.Element == null) { return; } #if DEBUG if (UIDevice.CurrentDevice.CheckSystemVersion(11, 0)) { webView.Configuration.WebsiteDataStore.HttpCookieStore.GetAllCookies((NSHttpCookie[] obj) => { System.Diagnostics.Debug.WriteLine("*** DecidePolicy webView.Configuration.WebsiteDataStore"); for (var i = 0; i < obj.Length; i++) { var nsCookie = obj[i]; var domain = nsCookie.Domain; System.Diagnostics.Debug.WriteLine($"Domain={nsCookie.Domain}; Name={nsCookie.Name}; Value={nsCookie.Value};"); } }); } #endif if (!UIDevice.CurrentDevice.CheckSystemVersion(11, 0)) { var headers = navigationAction.Request.Headers as NSMutableDictionary; var cookieDictionary = NSHttpCookie.RequestHeaderFieldsWithCookies(NSHttpCookieStorage.SharedStorage.Cookies); foreach (var item in cookieDictionary) { headers.SetValueForKey(item.Value, new NSString(item.Key.ToString())); } } var response = renderer.Element.HandleNavigationStartRequest(navigationAction.Request.Url.ToString()); if (response.Cancel || response.OffloadOntoDevice) { if (response.OffloadOntoDevice) { AttemptOpenCustomUrlScheme(navigationAction.Request.Url); } decisionHandler(WKNavigationActionPolicy.Cancel); } else { decisionHandler(WKNavigationActionPolicy.Allow); renderer.Element.Navigating = true; } }
public override void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action <WKNavigationActionPolicy> decisionHandler) { var urlToCheck = $"{navigationAction.Request.Url.Scheme}:{navigationAction.Request.Url.AbsoluteString}"; if (!_urls.Contains(urlToCheck)) { decisionHandler(WKNavigationActionPolicy.Allow); return; //base.ShouldInterceptRequest(view, request); } decisionHandler(WKNavigationActionPolicy.Cancel); // TODO: how to handle response? }
public override void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action <WKNavigationActionPolicy> decisionHandler) { // base.DecidePolicy(webView, navigationAction, decisionHandler); if (navigationAction.NavigationType == WKNavigationType.LinkActivated) { var url = navigationAction.Request.Url; if (url.AbsoluteUrl.AbsoluteString.StartsWith("https://fixity.io")) //Whatever your test happens to be { decisionHandler(WKNavigationActionPolicy.Allow); } else if (url.AbsoluteUrl.AbsoluteString.StartsWith("mailto:")) { decisionHandler(WKNavigationActionPolicy.Cancel); Device.OpenUri(new Uri(url.AbsoluteString)); //note: mail app not installed on simulator, must test with real device. } else { //tel:, sms: , and URLs outside the fixity.io domain decisionHandler(WKNavigationActionPolicy.Cancel); //webView.LoadFileUrl() Device.OpenUri(new Uri(url.AbsoluteString)); } } else if (navigationAction.NavigationType == WKNavigationType.Other) { var url = navigationAction.Request.Url; if (url.AbsoluteUrl.AbsoluteString.Contains("download.wx")) { //wisej download: cancel navigation and open in new Safari window. //decisionHandler(WKNavigationActionPolicy.Cancel); //Device.OpenUri(new Uri(url.AbsoluteString)); //Ideally, this would download the file to the users's home folder and then open it locally. decisionHandler(WKNavigationActionPolicy.Cancel); //Xamarin.Forms.DependencyService.Get<IMessage>().ShortAlert("Downloading..."); var fileName = MyDownloader.DownloadAndWriteFile(url.AbsoluteString); //Xamarin.Forms.DependencyService.Get<IMessage>().CancelAlert(); //kill alert so preview window can pop up in next call. MyDownloader.OpenFileByName(fileName); } else { decisionHandler(WKNavigationActionPolicy.Allow); } } else { decisionHandler(WKNavigationActionPolicy.Allow); } }
// https://stackoverflow.com/questions/37509990/migrating-from-uiwebview-to-wkwebview public override void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action <WKNavigationActionPolicy> decisionHandler) { var navEvent = WebNavigationEvent.NewPage; var navigationType = navigationAction.NavigationType; switch (navigationType) { case WKNavigationType.LinkActivated: navEvent = WebNavigationEvent.NewPage; if (navigationAction.TargetFrame == null) { webView?.LoadRequest(navigationAction.Request); } break; case WKNavigationType.FormSubmitted: navEvent = WebNavigationEvent.NewPage; break; case WKNavigationType.BackForward: navEvent = _renderer._lastBackForwardEvent; break; case WKNavigationType.Reload: navEvent = WebNavigationEvent.Refresh; break; case WKNavigationType.FormResubmitted: navEvent = WebNavigationEvent.NewPage; break; case WKNavigationType.Other: navEvent = WebNavigationEvent.NewPage; break; } _lastEvent = navEvent; var request = navigationAction.Request; var lastUrl = request.Url.ToString(); var args = new WebNavigatingEventArgs(navEvent, new UrlWebViewSource { Url = lastUrl }, lastUrl); WebView.SendNavigating(args); _renderer.UpdateCanGoBackForward(); decisionHandler(args.Cancel ? WKNavigationActionPolicy.Cancel : WKNavigationActionPolicy.Allow); }
public void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action <WKNavigationActionPolicy> decisionHandler) { if (navigationAction.NavigationType == WKNavigationType.LinkActivated) { decisionHandler.Invoke(WKNavigationActionPolicy.Cancel); if (navigationAction.Request.Url != null) { UIApplication.SharedApplication.OpenUrl(navigationAction.Request.Url); } } else { decisionHandler.Invoke(WKNavigationActionPolicy.Allow); } }
public override void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action <WKNavigationActionPolicy> decisionHandler) { if (navigationAction.NavigationType == WKNavigationType.LinkActivated) { // Open links in browser. if (UIApplication.SharedApplication.CanOpenUrl(navigationAction.Request.Url)) { UIApplication.SharedApplication.OpenUrl(navigationAction.Request.Url); } decisionHandler(WKNavigationActionPolicy.Cancel); } else { decisionHandler(WKNavigationActionPolicy.Allow); } }
//private async Task HandleEditButton() //{ // try // { // var page = ViewModel.CurrentWikiPage(Web.Url.AbsoluteString); // var wiki = await Task.Run(() => ViewModel.GetApplication().Client.Users[ViewModel.Username].Repositories[ViewModel.Repository].Wikis[page].GetInfo()); // var composer = new Composer { Title = "Edit" + Title, Text = wiki.Data }; // composer.NewComment(this, async (text) => { // try // { // await composer.DoWorkAsync("Saving...", () => Task.Run(() => ViewModel.GetApplication().Client.Users[ViewModel.Username].Repositories[ViewModel.Repository].Wikis[page].Update(text, Uri.UnescapeDataString("/" + page)))); // composer.CloseComposer(); // Refresh(); // } // catch (Exception ex) // { // AlertDialogService.ShowAlert("Unable to update page!", ex.Message); // composer.EnableSendButton = true; // }; // }); // } // catch (Exception e) // { // AlertDialogService.ShowAlert("Error", e.Message); // } //} public override bool ShouldStartLoad(WKWebView webView, WKNavigationAction navigationAction) { try { if (navigationAction.NavigationType == WKNavigationType.LinkActivated) { ViewModel.GoToWebCommand.ExecuteNow(navigationAction.Request.Url.ToString()); return(false); } } catch { } return(base.ShouldStartLoad(webView, navigationAction)); }
protected override bool ShouldStartLoad(WKWebView webView, WKNavigationAction navigationAction) { // F*****g BitBucket and their horrible user interface. if (ForbiddenRoutes.Any(navigationAction.Request.Url.AbsoluteString.StartsWith)) { AlertDialogService.ShowAlert("Invalid Request", "Sorry, due to restrictions you can not sign-up for a new account in CodeBucket."); return false; } //We're being redirected to our redirect URL so we must have been successful if (navigationAction.Request.Url.Host == "codebucket") { ViewModel.Code = navigationAction.Request.Url.Query.Split('=')[1]; ViewModel.LoginCommand.ExecuteIfCan(); return false; } return base.ShouldStartLoad(webView, navigationAction); }
protected override bool ShouldStartLoad(WKWebView webView, WKNavigationAction navigationAction) { try { if (navigationAction.NavigationType == WKNavigationType.LinkActivated) { if (navigationAction.Request.Url.ToString().Substring(0, 7).Equals("wiki://")) { GoToPage(navigationAction.Request.Url.ToString().Substring(7)); return false; } } } catch { } return base.ShouldStartLoad(webView, navigationAction); }
protected virtual bool ShouldStartLoad (WKWebView webView, WKNavigationAction navigationAction) { return true; }
public override void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action<WKNavigationActionPolicy> decisionHandler) { var ret = _webView.Get()?.ShouldStartLoad(webView, navigationAction) ?? true; decisionHandler(ret ? WKNavigationActionPolicy.Allow : WKNavigationActionPolicy.Cancel); }
protected override bool ShouldStartLoad(WKWebView webView, WKNavigationAction navigationAction) { var url = navigationAction.Request.Url; if(url.Scheme.Equals("app")) { var func = url.Host; if (func.Equals("ready")) { _domLoaded = true; foreach (var e in _toBeExecuted) Web.EvaluateJavaScript(e, null); } else if(func.Equals("comment")) { var commentModel = _serializationService.Deserialize<JavascriptCommentModel>(UrlDecode(url.Fragment)); PromptForComment(commentModel); } return false; } return base.ShouldStartLoad(webView, navigationAction); }
private bool OnLoadStart(WKNavigationAction navigation) { if (navigation.Request.Url.AbsoluteString.StartsWith("app://resize")) { RefreshSize().ToBackground(); return false; } if (!navigation.Request.Url.AbsoluteString.StartsWith("file://")) { if (UrlRequested != null) _urlSubject.OnNext(navigation.Request.Url.AbsoluteString); return false; } return true; }