/// <summary> /// Called when [element changed]. /// </summary> /// <param name="e">The e.</param> protected override void OnElementChanged(ElementChangedEventArgs <HybridWebView> e) { base.OnElementChanged(e); if (this.Control == null) { var webView = new NativeWebView(this); webView.Settings.JavaScriptEnabled = true; //Turn off hardware rendering webView.SetLayerType(LayerType.Software, null); //Set the background color to transparent to fix an issue where the //the picture would fail to draw webView.SetBackgroundColor(Color.Transparent.ToAndroid()); webView.SetWebViewClient(this.GetWebViewClient()); webView.SetWebChromeClient(this.GetWebChromeClient()); webView.AddJavascriptInterface(new Xamarin(this), "Xamarin"); this.SetNativeControl(webView); webView.LayoutParameters = new LayoutParams(LayoutParams.MatchParent, LayoutParams.MatchParent); } this.Unbind(e.OldElement); this.Bind(); }
#pragma warning disable CA1054 // Uri parameters should not be strings public void LoadUrl(string url) #pragma warning restore CA1054 // Uri parameters should not be strings { if (!string.IsNullOrEmpty(url)) { NativeWebView.LoadUrl(url); } }
public override UIView CreateView() { _view = new NativeWebView(); _view.MovedToWindowEvent += HandleMovedToWindowEvent; _view.TouchesBeganEvent += HandleTouchesBeganEvent; return(_view); }
private void OnGoForwardRequested(object sender, EventArgs eventArgs) { if (NativeWebView.CanGoForward()) { _eventState = WebNavigationEvent.Forward; NativeWebView.GoForward(); } UpdateCanGoBackForward(); }
private void OnLoadFinished(object sender, EventArgs e) { var url = NativeWebView.Url; if (!string.IsNullOrEmpty(url)) { SendNavigated(new UrlWebViewSource { Url = url }, _eventState, WebNavigationResult.Success); } NativeWebView.SetFocus(true); UpdateCanGoBackForward(); NativeWebView.Eval(LoadBlazorJSScript); Element.HandleNavigationFinished(new Uri(url)); }
private void OnRequestInterceptCallback(IntPtr context, IntPtr request, IntPtr userdata) { if (request == IntPtr.Zero) { throw new ArgumentNullException(nameof(request)); } #if TIZEN60 var url = NativeWebView.GetInterceptRequestUrl(request); #else var url = NativeWebView.GetInterceptRequestUrl(request).Replace("http://framework/", "framework://"); #endif var urlScheme = url.Substring(0, url.IndexOf(':')); if (Element != null && Element.SchemeHandlers.TryGetValue(urlScheme, out var schemeHandler)) { var uri = new Uri(url); Console.WriteLine($"uri : Host : {uri.Host} - {uri.AbsolutePath.Substring(1)} - test {uri.Host.Equals("0.0.0.0", StringComparison.Ordinal)}"); var contentStream = schemeHandler(url, out var contentType); if (contentStream != null) { var header = $"HTTP/1.0 200 OK\r\nContent-Type:{contentType}; charset=utf-8\r\nCache-Control:no-cache, max-age=0, must-revalidate, no-store\r\n\r\n"; if (urlScheme == "framework") { #pragma warning disable CA2000 // Dispose objects before losing scope var memoryStream = new MemoryStream(); #pragma warning restore CA2000 // Dispose objects before losing scope var buffer = Encoding.UTF8.GetBytes(InitScriptSource); memoryStream.Write(buffer, 0, buffer.Length); contentStream.CopyTo(memoryStream); contentStream.Dispose(); memoryStream.Position = 0; contentStream = memoryStream; } #pragma warning disable CA2000 // Dispose objects before losing scope var body = new StreamReader(contentStream).ReadToEnd(); #pragma warning restore CA2000 // Dispose objects before losing scope NativeWebView.SetInterceptRequestResponse(request, header, body, (uint)body.Length); return; } } NativeWebView.IgnoreInterceptRequest(request); }
protected override void OnElementChanged(ElementChangedEventArgs <WebViewExtended> e) { if (e is null) { throw new ArgumentNullException(nameof(e)); } if (Control == null) { TChromium.Initialize(); Forms.Context.Terminated += (sender, arg) => TChromium.Shutdown(); SetNativeControl(new WebViewContainer(Forms.NativeParent)); _interceptRequestCallback = OnRequestInterceptCallback; NativeWebView.LoadStarted += OnLoadStarted; NativeWebView.LoadFinished += OnLoadFinished; NativeWebView.LoadError += OnLoadError; NativeWebView.AddJavaScriptMessageHandler("BlazorHandler", PostMessageFromJS); NativeWebView.SetInterceptRequestCallback(_interceptRequestCallback); NativeWebView.GetSettings().JavaScriptEnabled = true; } if (e.OldElement != null) { e.OldElement.SendMessageFromJSToDotNetRequested -= OnSendMessageFromJSToDotNetRequested; e.OldElement.EvalRequested -= OnEvalRequested; e.OldElement.GoBackRequested -= OnGoBackRequested; e.OldElement.GoForwardRequested -= OnGoForwardRequested; e.OldElement.ReloadRequested -= OnReloadRequested; } if (e.NewElement != null) { e.NewElement.EvalRequested += OnEvalRequested; e.NewElement.EvaluateJavaScriptRequested += OnEvaluateJavaScriptRequested; e.NewElement.GoForwardRequested += OnGoForwardRequested; e.NewElement.GoBackRequested += OnGoBackRequested; e.NewElement.ReloadRequested += OnReloadRequested; e.NewElement.SendMessageFromJSToDotNetRequested += OnSendMessageFromJSToDotNetRequested; Load(); } base.OnElementChanged(e); }
/// <summary> /// Called when [element changed]. /// </summary> /// <param name="e">The e.</param> protected override void OnElementChanged(ElementChangedEventArgs <HybridWebView> e) { base.OnElementChanged(e); if (this.Control == null) { var webView = new NativeWebView(this); webView.Settings.JavaScriptEnabled = true; webView.SetWebViewClient(new Client(this)); webView.SetWebChromeClient(new ChromeClient(this)); webView.AddJavascriptInterface(new Xamarin(this), "Xamarin"); this.SetNativeControl(webView); } this.Unbind(e.OldElement); this.Bind(); }
protected override void Dispose(bool disposing) { if (disposing) { if (Control != null) { NativeWebView.StopLoading(); NativeWebView.LoadStarted -= OnLoadStarted; NativeWebView.LoadFinished -= OnLoadFinished; NativeWebView.LoadError -= OnLoadError; } if (Element != null) { Element.EvalRequested -= OnEvalRequested; Element.EvaluateJavaScriptRequested -= OnEvaluateJavaScriptRequested; Element.GoBackRequested -= OnGoBackRequested; Element.GoForwardRequested -= OnGoForwardRequested; Element.ReloadRequested -= OnReloadRequested; Element.SendMessageFromJSToDotNetRequested -= OnSendMessageFromJSToDotNetRequested; } } base.Dispose(disposing); }
#pragma warning disable CA1054 // Uri parameters should not be strings public void LoadHtml(string html, string baseUrl) #pragma warning restore CA1054 // Uri parameters should not be strings { NativeWebView.LoadHtml(html, baseUrl); }
private void UpdateCanGoBackForward() { ElementController.CanGoBack = NativeWebView.CanGoBack(); ElementController.CanGoForward = NativeWebView.CanGoForward(); }
private void OnReloadRequested(object sender, EventArgs eventArgs) { NativeWebView.Reload(); }
private Task <string> OnEvaluateJavaScriptRequested(string script) { NativeWebView.Eval(script); return(null); }
private void OnEvalRequested(object sender, EvalRequested eventArg) { NativeWebView.Eval(eventArg.Script); }
private void OnSendMessageFromJSToDotNetRequested(object sender, string message) { var messageJSStringLiteral = JavaScriptEncoder.Default.Encode(message); NativeWebView.Eval($"__dispatchMessageCallback(\"{messageJSStringLiteral}\")"); }
public override void CreateView() { _view = new NativeWebView(); _view.MovedToWindowEvent += HandleMovedToWindowEvent; _view.TouchesBeganEvent += HandleTouchesBeganEvent; }