Esempio n. 1
0
        /// <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);
            }
        }
Esempio n. 3
0
        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}\")");
        }
Esempio n. 16
0
 public override void CreateView()
 {
     _view = new NativeWebView();
     _view.MovedToWindowEvent += HandleMovedToWindowEvent;
     _view.TouchesBeganEvent  += HandleTouchesBeganEvent;
 }