Esempio n. 1
0
        protected override void OnElementChanged(ElementChangedEventArgs <BlazorWebView> e)
        {
            base.OnElementChanged(e);

            if (Control == null && e.NewElement != null)
            {
                userController = new WKUserContentController();
                //var script = new WKUserScript(new NSString(ContextBridgeHelper.GetInjectableJavascript(false)), WKUserScriptInjectionTime.AtDocumentEnd, false);
                //userController.AddUserScript(script);
                userController.AddScriptMessageHandler(this, "invokeAction");

                var config = new WKWebViewConfiguration {
                    UserContentController = userController, Preferences = new WKPreferences()
                    {
                        JavaScriptCanOpenWindowsAutomatically = false,
                        JavaScriptEnabled = true
                    }
                };
                var webView = new WKWebView(Frame, config);
                webView.NavigationDelegate = new WebNavigationDelegate(this);
                SetNativeControl(webView);
            }

            if (e.OldElement != null)
            {
                userController.RemoveAllUserScripts();
                userController.RemoveScriptMessageHandler("invokeAction");
            }
            if (e.NewElement != null)
            {
                Control.LoadRequest(new NSUrlRequest(new NSUrl(WebApplicationFactory.GetBaseURL())));
            }
        }
Esempio n. 2
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            var config = new WKWebViewConfiguration();

            //config.UserContentController.AddScriptMessageHandler(this, "interOp");

            _webView = new WKWebView(View.Frame, config);
            _webView.NavigationDelegate = this;
            _webView.TranslatesAutoresizingMaskIntoConstraints = false;
            View.AddSubview(_webView);

            var keys    = new object[] { "webview" };
            var objects = new object[] { _webView };
            var myViews = NSDictionary.FromObjectsAndKeys(objects, keys);

            //horizontal layout
            View.AddConstraints(NSLayoutConstraint.FromVisualFormat(@"|[webview]|", 0, null, myViews));
            //vertical layout
            View.AddConstraints(NSLayoutConstraint.FromVisualFormat(@"V:|-44-[webview]|", 0, null, myViews));

            var url     = new NSUrl("http://pelican-chart-demo.azurewebsites.net/Chart/Ciq?x=1s");
            var request = new NSUrlRequest(url);

            _webView.LoadRequest(request);
        }
		protected override void OnElementChanged(ElementChangedEventArgs<HybridWebView> e)
		{
			
			base.OnElementChanged(e);
			if (Control == null)
			{
				
				userController = new WKUserContentController();
				var config = new WKWebViewConfiguration { UserContentController = userController };
				var webView = new WKWebView(Frame, config);

				var script = new WKUserScript(new NSString(JavaScriptFunction), WKUserScriptInjectionTime.AtDocumentEnd, false);
				userController.AddUserScript(script);
				userController.AddScriptMessageHandler(this, "invokeAction");
				SetNativeControl(webView);
				if (e.OldElement != null)
				{
					userController.RemoveAllUserScripts();
					userController.RemoveScriptMessageHandler("invokeAction");
					var hybridWebView = e.OldElement as HybridWebView;
					hybridWebView.Cleanup();
				}
				if (e.NewElement != null)
				{
					var a = this.Control.Url;
					Control.AccessibilityViewIsModal = true;

					NSMutableUrlRequest sendData = new NSMutableUrlRequest(new NSUrl(Element.Uri));
					Control.LoadRequest(sendData);

				}
			}
		}
        public static WKWebViewConfiguration GetHybridWKWebViewConfiguration()
        {
            var config = new WKWebViewConfiguration();

            config.SetUrlSchemeHandler(new SafeSchemaHandler(), "safe");
            return(config);
        }
Esempio n. 5
0
        private void SetupControl()
        {
            _navigationDelegate = new HybridWebViewNavigationDelegate(this);
            _contentController  = new WKUserContentController();
            _contentController.AddScriptMessageHandler(this, "invokeAction");
            _configuration = new WKWebViewConfiguration
            {
                UserContentController     = _contentController,
                AllowsInlineMediaPlayback = true
            };


            var wkWebView = new WKWebView(Frame, _configuration)
            {
                Opaque             = false,
                UIDelegate         = this,
                NavigationDelegate = _navigationDelegate,
            };


            HybridWebViewControl.CallbackAdded += OnCallbackAdded;

            SetNativeControl(wkWebView);
            SetUserAgent();
            OnControlChanged?.Invoke(this, wkWebView);
        }
Esempio n. 6
0
        public CustomVideoPlayer()
        {
            var webConfiguration = new WKWebViewConfiguration();

            webview = new WKWebView(new CoreGraphics.CGRect(0, 0, 170, 200), webConfiguration);
            this.AddSubview(webview);
        }
        private void SetupControl(FormsWebView element)
        {
            WebViewControlDelegate.OnNavigationRequestedFromUser += OnUserNavigationRequested;
            WebViewControlDelegate.OnInjectJavascriptRequest     += OnInjectJavascriptRequested;
            WebViewControlDelegate.OnActionAdded += OnActionAdded;

            UserController = new WKUserContentController();
            UserController.AddScriptMessageHandler(this, "invokeAction");

            NavigationDelegate   = new FormsWKNavigationDelegate(this, element);
            WebViewConfiguration = new WKWebViewConfiguration {
                UserContentController = UserController
            };

            var webView = new WKWebView(Frame, WebViewConfiguration);

            webView.UIDelegate         = this;
            webView.NavigationDelegate = NavigationDelegate;

            UriBase = NSBundle.MainBundle.ResourcePath;

            OnControlChanging?.Invoke(this, Element, Control);
            SetNativeControl(webView);
            OnControlChanged?.Invoke(this, Element, Control);
        }
        protected override void OnElementChanged(ElementChangedEventArgs <CustomWebView> e)
        {
            base.OnElementChanged(e);
            if (Control == null)
            {
                var config = new WKWebViewConfiguration();
                _wkWebView = new WKWebView(Frame, config);
                _wkWebView.NavigationDelegate = this;
                _wkWebView.ScrollView.AlwaysBounceVertical = false;
                _wkWebView.ScrollView.Bounces = false;
                _wkWebView.ScrollView.ShowsHorizontalScrollIndicator = false;
                _wkWebView.ScrollView.ShowsVerticalScrollIndicator   = false;
                _wkWebView.ScrollView.ScrollEnabled = false;
                _wkWebView.ContentMode = UIKit.UIViewContentMode.ScaleToFill;
                SetNativeControl(_wkWebView);
            }

            if (e.NewElement != null && Element?.Source != null)
            {
                NSUrl baseurl = new NSUrl(NSBundle.MainBundle.BundlePath, true);
                //Control.LoadRequest(new NSUrlRequest(new NSUrl((Element.Source as UrlWebViewSource).Url)));
                Control.LoadHtmlString((Element.Source as HtmlWebViewSource).Html, baseurl);
                _wkWebView.NavigationDelegate = this;
            }
        }
Esempio n. 9
0
        public Xamarin.Forms.View CreateWebView()
        {
            var preferences = new WKPreferences()
            {
                JavaScriptEnabled = true,
                JavaScriptCanOpenWindowsAutomatically = false
            };
            var configuration = new WKWebViewConfiguration()
            {
                UserContentController = userContentController = new WKUserContentController()
            };
            var helper         = new Ao3TrackHelper(this);
            var messageHandler = new Ao3TrackReader.iOS.ScriptMessageHandler(helper);

            userContentController.AddScriptMessageHandler((WKScriptMessageHandler)messageHandler, "ao3track");
            this.helper = helper;

            configuration.Preferences = preferences;

            webView = new WKWebView(configuration)
            {
                NavigationDelegate = new NavigationDelegate(this)
            };

            webView.FocuseChanged += WebView_FocusChange;

            var xview = webView.ToView();

            xview.SizeChanged += Xview_SizeChanged;

            return(xview);
        }
        public TrustlyWKWebView(string checkoutUrl, CGRect frame) : base(frame)
        {
            try
            {
                //Create a new content controller.
                var userContentController = new WKUserContentController();
                //Create configuration
                var configuration = new WKWebViewConfiguration();
                configuration.UserContentController = userContentController;
                configuration.Preferences.JavaScriptCanOpenWindowsAutomatically = true;

                //Crate a webview
                TrustlyView = new WKWebView(frame, configuration);
                TrustlyView.NavigationDelegate = this;
                TrustlyView.UIDelegate         = this;
                TrustlyView.NavigationDelegate = this;
                TrustlyView.UIDelegate         = this;

                //Add the trustly ScriptOpenURLScheme as a handler for this contentcontroller
                userContentController.AddScriptMessageHandler(new TrustlyWKScriptOpenURLScheme(TrustlyView), TrustlyWKScriptOpenURLScheme.NAME);

                var url = new NSUrl(checkoutUrl);

                TrustlyView.LoadRequest(new NSUrlRequest(url));
                TrustlyView.AllowsBackForwardNavigationGestures = true;

                AddSubview(TrustlyView);
                TrustlyView.TranslatesAutoresizingMaskIntoConstraints = false;
                TrustlyView.BottomAnchor.ConstraintEqualTo(TrustlyView.Superview.BottomAnchor, 0).Active     = true;
                TrustlyView.TopAnchor.ConstraintEqualTo(TrustlyView.Superview.TopAnchor, 0).Active           = true;
                TrustlyView.LeadingAnchor.ConstraintEqualTo(TrustlyView.Superview.LeadingAnchor, 0).Active   = true;
                TrustlyView.TrailingAnchor.ConstraintEqualTo(TrustlyView.Superview.TrailingAnchor, 0).Active = true;
            }
            catch { }
        }
Esempio n. 11
0
        void SetupControl(FormsWebView element)
        {
            WebViewControlDelegate.OnNavigationRequestedFromUser += OnUserNavigationRequested;
            WebViewControlDelegate.OnInjectJavascriptRequest     += OnInjectJavascriptRequested;
            WebViewControlDelegate.OnStackNavigationRequested    += OnStackNavigationRequested;
            WebViewControlDelegate.OnActionAdded += OnActionAdded;

            UserController = new WKUserContentController();
            UserController.AddScriptMessageHandler(this, "invokeAction");

            NavigationDelegate   = new FormsWKNavigationDelegate(this, element);
            WebViewConfiguration = new WKWebViewConfiguration {
                UserContentController = UserController
            };

            var webView = new WKWebView(Frame, WebViewConfiguration);

            webView.Opaque             = false;
            webView.UIDelegate         = this;
            webView.NavigationDelegate = NavigationDelegate;
            webView.ScalesPageToFit    = true;

            OnControlChanging?.Invoke(this, Element, Control);
            SetNativeControl(webView);
            OnControlChanged?.Invoke(this, Element, Control);
        }
        protected override void OnElementChanged(ElementChangedEventArgs <HybridWebView> e)
        {
            base.OnElementChanged(e);

            if (Control == null)
            {
                _userController = new WKUserContentController();
                var script = new WKUserScript(new NSString(JSFunction), WKUserScriptInjectionTime.AtDocumentEnd, false);
                _userController.AddUserScript(script);
                _userController.AddScriptMessageHandler(this, "invokeAction");

                var config = new WKWebViewConfiguration {
                    UserContentController = _userController
                };
                var webView = new WKWebView(Frame, config);
                SetNativeControl(webView);
            }

            if (e.OldElement != null)
            {
                _userController.RemoveAllUserScripts();
                _userController.RemoveScriptMessageHandler("invokeAction");
                var hybridWebView = e.OldElement as HybridWebView;
                hybridWebView.Cleanup();
            }

            if (e.NewElement != null)
            {
                Control.LoadRequest(new NSUrlRequest(new NSUrl(Element.Uri)));
            }
        }
Esempio n. 13
0
        protected override void OnElementChanged(ElementChangedEventArgs <HybridWebPlatformView> e)
        {
            base.OnElementChanged(e);

            if (Control == null && e.NewElement != null)
            {
                userController = new WKUserContentController();

                var config = new WKWebViewConfiguration()
                {
                    UserContentController = userController
                };

                var script = new WKUserScript(new NSString(NativeFunction + HybridWebPlatformView.GetInitialJsScript(NativeFuncCall)), WKUserScriptInjectionTime.AtDocumentEnd, false);

                userController.AddUserScript(script);

                userController.AddScriptMessageHandler(this, "native");

                var webView = new WKWebView(Frame, config)
                {
                    NavigationDelegate = CreateNavidationalDelagate(), UIDelegate = new HybridWebPlatformUIDelegate()
                };

                webView.Opaque = false;

                webView.BackgroundColor = UIColor.Clear;

                SetNativeControl(webView);
            }

            e.NewElement.SetViewRenderer(this);
        }
Esempio n. 14
0
        protected override void OnElementChanged(ElementChangedEventArgs <ExtendedWebView> e)
        {
            try
            {
                view = (ExtendedWebView)Element;
                string url = view.Source.GetValue(UrlWebViewSource.UrlProperty).ToString();

                //The width=device-width part sets the width of the page to follow the screen-width of the device
                //(which will vary depending on the device)
                string javaScript = @"var meta = document.createElement('meta');
                                       meta.setAttribute('name', 'viewport');
                                       meta.setAttribute('content', 'width=device-width');
                                       document.getElementsByTagName('head')[0].appendChild(meta);";

                WKUserScript            wkUScript     = new WKUserScript((NSString)javaScript, WKUserScriptInjectionTime.AtDocumentEnd, true);
                WKUserContentController wkUController = new WKUserContentController();
                wkUController.AddUserScript(wkUScript);

                WKWebViewConfiguration wkWebConfig = new WKWebViewConfiguration();
                wkWebConfig.UserContentController = wkUController;
                _wkWebView = new WKWebView(Frame, wkWebConfig);
                _wkWebView.ScrollView.ScrollEnabled = true;
                _wkWebView.NavigationDelegate       = new HybridWebviewDelegate();
                _wkWebView.LoadRequest(new NSUrlRequest(new NSUrl(url)));

                SetNativeControl(_wkWebView);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        protected override void OnElementChanged(ElementChangedEventArgs <HybridWebView> e)
        {
            base.OnElementChanged(e);

            if (Control == null)
            {
                userController = new WKUserContentController();
                var script = new WKUserScript(new NSString(JavaScriptFunction), WKUserScriptInjectionTime.AtDocumentEnd, false);
                userController.AddUserScript(script);
                userController.AddScriptMessageHandler(this, "invokeAction");

                var config = new WKWebViewConfiguration {
                    UserContentController = userController
                };
                var webView = new WKWebView(Frame, config);
                SetNativeControl(webView);
            }
            if (e.OldElement != null)
            {
                userController.RemoveAllUserScripts();
                userController.RemoveScriptMessageHandler("invokeAction");
                var hybridWebView = e.OldElement as HybridWebView;
                hybridWebView.Cleanup();
            }
            if (e.NewElement != null)
            {
                string fileName = Path.Combine(NSBundle.MainBundle.BundlePath, string.Format("Content/{0}", Element.Uri));
                Control.LoadRequest(new NSUrlRequest(new NSUrl(fileName, false)));
            }
        }
        public void AppDomainInitializer()
        {
            var userController = new WKUserContentController();

            userController.AddScriptMessageHandler(this, "myapp");

            var config = new WKWebViewConfiguration
            {
                UserContentController = userController
            };

            webview_real = new WKWebView(View.Frame, config);
            View.AddSubview(webview_real);

            #region load from file
            string htmlPath     = NSBundle.MainBundle.PathForResource("Alerts", "html");
            string htmlContents = File.ReadAllText(htmlPath);
            webview_real.LoadHtmlString(htmlContents, null);
            #endregion


            #region load from url sample
            //var url = "https://www.google.com.tw";
            //webview_real.LoadRequest(new NSUrlRequest(new NSUrl(url)));
            #endregion
        }
Esempio n. 17
0
        protected override void OnElementChanged(ElementChangedEventArgs <customWebView> e)
        {
            base.OnElementChanged(e);

            if (e.OldElement != null)
            {
                e.OldElement.SetTextScaned = null;
                e.OldElement.DoSearch      = null;
                e.OldElement.Observe       = null;
            }
            if (e.NewElement != null)
            {
                if (Control == null)
                {
                    userController = new WKUserContentController();
                    var config = new WKWebViewConfiguration {
                        UserContentController = userController
                    };
                    wkWebView = new WKWebView(Frame, config);
                    SetNativeControl(wkWebView);

                    buttonPressedScriptHandler = new WebViewButtonPressedHandler(e.NewElement);
                    userController.AddScriptMessageHandler(buttonPressedScriptHandler, "ButtonPressedScriptHandler");
                }

                e.NewElement.SetTextScaned = SetSearchText;
                e.NewElement.DoSearch      = DoSearch;
                e.NewElement.Observe       = Observe;

                if (e.NewElement.Source != null)
                {
                    Control.LoadRequest(new NSUrlRequest(new NSUrl((Element.Source as UrlWebViewSource)?.Url)));
                }
            }
        }
Esempio n. 18
0
        protected override void OnElementChanged(ElementChangedEventArgs <CustomWebView> e)
        {
            base.OnElementChanged(e);

            if (Control == null)
            {
                var config = new WKWebViewConfiguration();
                config.AllowsInlineMediaPlayback     = true;
                config.Preferences.JavaScriptEnabled = true;
                _wkWebView = new WKWebView(Frame, config);
                SetNativeControl(_wkWebView);
            }
            if (e.OldElement != null)
            {
                // Cleanup
            }
            if (e.NewElement != null)
            {
                Control.SizeToFit();
                var customWebView = Element as CustomWebView;
                var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                if (!string.IsNullOrWhiteSpace(customWebView.Uri))
                {
                    var fileUrl = new NSUrl(customWebView.Uri, false);
                    var docUrl  = new NSUrl(documentsPath, true);
                    Control.LoadFileUrl(fileUrl, docUrl);
                }
                else if (!string.IsNullOrWhiteSpace(customWebView.Data))
                {
                    Control.LoadHtmlString((NSString)customWebView.Data, NSUrl.FromString("https://localhost"));
                }
            }
        }
Esempio n. 19
0
        public HybridWebViewRenderer(WKWebViewConfiguration config) : base(config)
        {
            userController = config.UserContentController;
            var script = new WKUserScript(new NSString(JavaScriptFunction), WKUserScriptInjectionTime.AtDocumentEnd, false);

            userController.AddUserScript(script);
        }
        protected override void OnElementChanged(ElementChangedEventArgs <GalleyBrowserControl> e)
        {
            base.OnElementChanged(e);

            if (Control == null)
            {
                _userController = new WKUserContentController();
                var script = new WKUserScript(new NSString(JavaScriptFunction), WKUserScriptInjectionTime.AtDocumentEnd, false);
                _userController.AddUserScript(script);
                _userController.AddScriptMessageHandler(this, GalleyHtmlConstants.InvokeSharpCodeActionName);

                var config = new WKWebViewConfiguration {
                    UserContentController = _userController
                };
                var webView = new WKWebView(Frame, config)
                {
                    NavigationDelegate = new CustomWKNavigationDelegate()
                };
                SetNativeControl(webView);
                OnElementPropertyChanged(nameof(Element.Uri));
                OnElementPropertyChanged(nameof(Element.Html));
                OnJavaScriptInvoked(Element.JavaScriptFunction);
            }
            if (e.OldElement != null)
            {
                _userController.RemoveAllUserScripts();
                _userController.RemoveScriptMessageHandler(GalleyHtmlConstants.InvokeSharpCodeActionName);
                e.OldElement.JavaScriptInvoked -= OnJavaScriptInvoked;
            }
            if (e.NewElement != null)
            {
                e.NewElement.JavaScriptInvoked += OnJavaScriptInvoked;
            }
        }
Esempio n. 21
0
        protected override void OnElementChanged(ElementChangedEventArgs <HybridWebView> e)
        {
            base.OnElementChanged(e);

            // if disposing, NewElement is null. In that case just return
            if (e.NewElement == null)
            {
                return;
            }

            if (Control == null)
            {
                EmbedJS();
                var config = new WKWebViewConfiguration {
                    UserContentController = _UserController
                };
                var webView = new WKWebView(Frame, config);
                webView.WeakNavigationDelegate = this;
                webView.TranslatesAutoresizingMaskIntoConstraints = false;
                SetNativeControl(webView);
            }

            if (e.OldElement != null)
            {
                _UserController.RemoveAllUserScripts();
                _UserController.RemoveScriptMessageHandler("invokeAction");
                Element.InvokeScript -= Element_InvokeScriptEvent;
            }

            if (e.NewElement != null)
            {
                Element.InvokeScript += Element_InvokeScriptEvent;
            }
        }
Esempio n. 22
0
 /// <summary>
 /// Produces PNG from HTML
 /// </summary>
 /// <param name="taskCompletionSource"></param>
 /// <param name="html"></param>
 /// <param name="fileName"></param>
 public void ToPng(TaskCompletionSource <ToFileResult> taskCompletionSource, string html, string fileName, int width)
 {
     if (NSProcessInfo.ProcessInfo.IsOperatingSystemAtLeastVersion(new NSOperatingSystemVersion(11, 0, 0)))
     {
         string                  jScript       = @"var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);";
         WKUserScript            wkUScript     = new WKUserScript((NSString)jScript, WKUserScriptInjectionTime.AtDocumentEnd, true);
         WKUserContentController wkUController = new WKUserContentController();
         wkUController.AddUserScript(wkUScript);
         var configuration = new WKWebViewConfiguration
         {
             UserContentController = wkUController
         };
         var webView = new WKWebView(new CGRect(0, 0, width, width), configuration)
         {
             UserInteractionEnabled = false,
             BackgroundColor        = UIColor.White
         };
         webView.NavigationDelegate = new WKNavigationCompleteCallback(fileName, new WebViewToPngSize(width), null, taskCompletionSource, NavigationComplete);
         webView.LoadHtmlString(html, null);
     }
     else
     {
         taskCompletionSource.SetResult(new ToFileResult(true, "PNG output not available prior to iOS 11"));
     }
 }
Esempio n. 23
0
        public static WebViewWrapper WrapperFactory(MusicProvider provider)
        {
            WKUserContentController controller = new WKUserContentController();

            controller.AddUserScript(
                new WKUserScript(new NSString(provider.EventsJs), WKUserScriptInjectionTime.AtDocumentEnd, false)
                );
            controller.AddScriptMessageHandler(Container.WKScriptMessageHandler, "playbackState");

            WKWebViewConfiguration config = new WKWebViewConfiguration
            {
                UserContentController = controller
            };

            config.Preferences.SetValueForKey(NSObject.FromObject(true), new NSString("developerExtrasEnabled"));

            var webView = new WKWebView(new CGRect(0, 0, 100, 100), config)
            {
                CustomUserAgent = "Mozilla/5.0 " +
                                  "(Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 " +
                                  "(KHTML, like Gecko) Version/12.0 Safari/605.1.15",
                AutoresizingMask   = NSViewResizingMask.HeightSizable | NSViewResizingMask.WidthSizable,
                NavigationDelegate = new NavigationDelegate()
            };

            webView.TranslatesAutoresizingMaskIntoConstraints = false;
            var req = new NSUrlRequest(new NSUrl(provider.Url));

            webView.LoadRequest(req);

            return(new WebViewWrapper(webView, provider));
        }
        protected override void OnElementChanged(ElementChangedEventArgs <WebViewExtended> e)
        {
#pragma warning disable CA1062 // Validate arguments of public methods
            if (e.OldElement != null)
#pragma warning restore CA1062 // Validate arguments of public methods
            {
                e.OldElement.SendMessageFromJSToDotNetRequested -= OnSendMessageFromJSToDotNetRequested;
            }

            if (e.NewElement != null)
            {
                if (Control == null)
                {
#pragma warning disable CA2000 // Dispose objects before losing scope
                    var config = new WKWebViewConfiguration();
#pragma warning restore CA2000 // Dispose objects before losing scope
#pragma warning disable CA2000 // Dispose objects before losing scope
                    config.Preferences.SetValueForKey(FromObject(true), new NSString("developerExtrasEnabled"));
#pragma warning restore CA2000 // Dispose objects before losing scope

                    var frameworkScriptSource = @"
    if (window.location.href.startsWith('app://'))
    {
        var blazorScript = document.createElement('script');
        blazorScript.src = 'framework://blazor.desktop.js';
        document.body.appendChild(blazorScript);
        (function () {
	        window.onpageshow = function(event) {
		        if (event.persisted) {
			        window.location.reload();
		        }
	        };
        })();
    }
                    ";
                    config.UserContentController.AddScriptMessageHandler(this, "webwindowinterop");
#pragma warning disable CA2000 // Dispose objects before losing scope
                    config.UserContentController.AddUserScript(new WKUserScript(
                                                                   new NSString(frameworkScriptSource), WKUserScriptInjectionTime.AtDocumentEnd, true));
#pragma warning restore CA2000 // Dispose objects before losing scope

                    foreach (var(scheme, handler) in Element.SchemeHandlers)
                    {
#pragma warning disable CA2000 // Dispose objects before losing scope
                        config.SetUrlSchemeHandler(new SchemeHandler(handler), scheme);
#pragma warning restore CA2000 // Dispose objects before losing scope
                    }

                    _wkWebView = new WKWebView(Frame, config);
                    SetNativeControl(_wkWebView);

                    _wkWebView.NavigationDelegate = new WebViewNavigationDelegate(Element);
                    Element.SendMessageFromJSToDotNetRequested += OnSendMessageFromJSToDotNetRequested;
                }

                Load();
            }

            base.OnElementChanged(e);
        }
Esempio n. 25
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            Title = "Connect Account";
            View.BackgroundColor = ColorHelper.Background0.ToPlatformColor();

            var config = new WKWebViewConfiguration();

            config.ApplicationNameForUserAgent = "Version/8.0.2 Safari/600.2.5";

            // Create the webview
            _webView = new WKWebView(View.Frame, config);

            _urlObs = _webView.AddObserver("URL", NSKeyValueObservingOptions.New, async(o) =>
            {
                var newUrl = _webView.Url.ToString();
                await ViewModel.HandleRequestCommand.ExecuteAsync(newUrl);
            });

            View.AddSubview(_webView);

            // Navigate to the request url
            var url     = new NSUrl(ViewModel.AuthenticationDetails.ConnectUrl);
            var request = new NSUrlRequest(url);

            _webView.LoadRequest(request);

            // Cancel button
            NavigationItem.LeftBarButtonItem = new UIBarButtonItem("Cancel", UIBarButtonItemStyle.Plain, delegate { ViewModel.CloseCommand.Execute(); });
        }
        protected override void OnElementChanged(ElementChangedEventArgs <HybridWebView> e)
        {
            base.OnElementChanged(e);

            if (Control == null)
            {
                userController = new WKUserContentController();
                var script = new WKUserScript(new NSString(JavaScriptFunction), WKUserScriptInjectionTime.AtDocumentEnd, true);
                var api    = new WKUserScript(new NSString(Element.APIJS), WKUserScriptInjectionTime.AtDocumentStart, true);
                // var apiSetup = new WKUserScript(new NSString(APISetup), WKUserScriptInjectionTime.AtDocumentStart, true);
                userController.AddUserScript(script);
                userController.AddUserScript(api);
                // userController.AddUserScript(apiSetup);

                userController.AddScriptMessageHandler(this, "invokeAction");


                var config = new WKWebViewConfiguration {
                    UserContentController = userController
                };
                WKJavascriptEvaluationResult handler = (NSObject result, NSError err) => {
                    if (err != null)
                    {
                        System.Console.WriteLine(err);
                    }
                    if (result != null)
                    {
                        System.Console.WriteLine(result);
                    }
                };
                var webView = new WKWebView(Frame, config);
                // var js = (NSString)"SetupAPI()";
                //webView.EvaluateJavaScript(js, null);
                webView.Configuration.Preferences.SetValueForKey(NSObject.FromObject(true), new NSString("allowFileAccessFromFileURLs"));
                webView.CustomUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1";
                webView.SizeToFit();


                SetNativeControl(webView);
            }
            if (e.OldElement != null)
            {
                userController.RemoveAllUserScripts();
                userController.RemoveScriptMessageHandler("invokeAction");
                userController.RemoveScriptMessageHandler("Terminate");
                userController.RemoveScriptMessageHandler("Commit");
                var hybridWebView = e.OldElement as HybridWebView;
                hybridWebView.Cleanup();
            }
            if (e.NewElement != null)
            {
                var docsDir      = NSFileManager.DefaultManager.GetUrl(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomain.User, null, true, out var error);
                var data         = NSUrl.FromFilename(Path.Combine(docsDir.Path, Element.iOSPath));
                var frame        = NSUrl.FromFilename(Path.Combine(docsDir.Path, "Courses/index.htm"));
                var htmlString   = new NSString(Element.Source);
                var content      = NSUrl.FromFilename(Path.Combine(docsDir.Path, "Courses"));
                var contentFrame = NSUrl.FromFilename(Path.Combine(docsDir.Path));
                Control.LoadFileUrl(data, content);
            }
        }
        void SetupControl()
        {
            _navigationDelegate = new FormsNavigationDelegate(this);
            _contentController  = new WKUserContentController();
            _contentController.AddScriptMessageHandler(this, "invokeAction");
            _configuration = new WKWebViewConfiguration {
                UserContentController = _contentController
            };

            if (Element.ApplicationNameForUserAgent != null && Element.ApplicationNameForUserAgent.Length > 0)
            {
                _configuration.ApplicationNameForUserAgent = Element.ApplicationNameForUserAgent;
            }

            var wkWebView = new WKWebView(Frame, _configuration)
            {
                Opaque             = false,
                UIDelegate         = this,
                NavigationDelegate = _navigationDelegate
            };

            FormsWebView.CallbackAdded += OnCallbackAdded;

            SetNativeControl(wkWebView);
            OnControlChanged?.Invoke(this, wkWebView);
        }
Esempio n. 28
0
        protected override void OnElementChanged(ElementChangedEventArgs <HybridWebView> e)
        {
            if (Control == null)
            {
                userController = new WKUserContentController();
                var script = new WKUserScript(new NSString(JavaScriptFunction), WKUserScriptInjectionTime.AtDocumentStart, false);
                userController.AddUserScript(script);
                userController.AddScriptMessageHandler(this, "invokeNativeCode");

                var config = new WKWebViewConfiguration {
                    UserContentController = userController
                };
                var webView = new WKWebView(Frame, config);

                SetNativeControl(webView);
            }
            if (e.OldElement != null)
            {
                userController.RemoveAllUserScripts();
                userController.RemoveScriptMessageHandler("invokeNativeCode");
                var hybridWebView = e.OldElement as HybridWebView;
                hybridWebView.Cleanup();
            }
            if (e.NewElement != null)
            {
                string fileName = Path.Combine(NSBundle.MainBundle.BundlePath, string.Format("Content/{0}", Element.Uri));
                Control.LoadRequest(new NSUrlRequest(new NSUrl(fileName, false)));
                (e.NewElement as HybridWebView).NativeEvent += HybridWebViewRenderer_NativeEvent;
                //var fileContents = File.ReadAllText(fileName);
                //Control.LoadHtmlString(fileContents, new NSUrl(NSBundle.MainBundle.BundlePath + "/Content", true));
            }
        }
        void SetupControl()
        {
            _navigationDelegate = new FormsNavigationDelegate(this);
            _contentController  = new WKUserContentController();
            _contentController.AddScriptMessageHandler(this, "invokeAction");
            _configuration = new WKWebViewConfiguration {
                UserContentController = _contentController,
            };
            _configuration.ProcessPool = _processPool;

            var wkWebView = new WKWebView(Frame, _configuration)
            {
                Opaque             = false,
                UIDelegate         = this,
                NavigationDelegate = _navigationDelegate,
            };

            FormsWebView.CallbackAdded += OnCallbackAdded;

            try {
                //Autoresize after rotation. Wrapped in try catch with no handling since untested
                wkWebView.ContentMode      = UIViewContentMode.ScaleAspectFit;
                wkWebView.AutoresizingMask = UIViewAutoresizing.FlexibleDimensions;
                wkWebView.SizeToFit();

                if (wkWebView.ScrollView != null)
                {
                    wkWebView.ScrollView.Bounces = false;
                }
            } catch { /*Do nothing right now*/ }


            SetNativeControl(wkWebView);
            OnControlChanged?.Invoke(this, wkWebView);
        }
Esempio n. 30
0
        protected override void OnElementChanged(ElementChangedEventArgs <CustomWebView> e)
        {
            base.OnElementChanged(e);

            if (Control == null)
            {
                userController = new WKUserContentController();
                var script = new WKUserScript(new NSString(JavaScriptFunction), WKUserScriptInjectionTime.AtDocumentEnd, false);
                userController.AddUserScript(script);
                userController.AddScriptMessageHandler(this, "invokeAction");

                var config = new WKWebViewConfiguration {
                    UserContentController = userController
                };
                var webView = new WKWebView(Frame, config);
                SetNativeControl(webView);
            }

            if (e.OldElement != null)
            {
                userController.RemoveAllUserScripts();
                userController.RemoveScriptMessageHandler("invokeAction");

                var customWebView = e.OldElement as CustomWebView;
                customWebView.Cleanup();
            }

            if (e.NewElement != null)
            {
                System.Diagnostics.Debug.WriteLine(Element.Uri);
                Control.LoadRequest(new NSUrlRequest(new NSUrl(Element.Uri)));
            }
        }
		public ViewController()
		{
			var split = new NSSplitView (new CGRect (0.0f, 0.0f, 400.0f, 400.0f)) { DividerStyle = NSSplitViewDividerStyle.Thin };
			var text = new NSTextField(new CGRect(0.0f, 0.0f, 64.0f, 16.0f));
			split.AddSubview (text);
			var button = new NSButton (new CGRect (0.0f, 0.0f, 64.0f, 16.0f)) {
				Title = "Go",
				StringValue = "https://www.google.com/" // TODO: This doesn't get set for some reason
			};
			button.Activated += (object sender, EventArgs e) => m_webView.LoadRequest (new NSUrlRequest (new NSUrl (text.StringValue)));
			split.AddSubview (button);

			var config = new WKWebViewConfiguration ();
			config.Preferences.SetValueForKey(NSNumber.FromBoolean(true), new NSString("developerExtrasEnabled"));
			m_webView = new WKWebView(new CGRect(0.0f, 0.0f, 400.0f, 400.0f), config);
			split.AddSubview (m_webView);
			View = split;
		}
        public override void CustomizeWebView()
        {
            WKWebViewConfiguration config = new WKWebViewConfiguration ();

            // Adding Custom Message Handler
            WKUserContentController userContentController = new WKUserContentController ();
            WKScriptMessageHandler scriptMessageHandler = new IPhoneWKScriptMessageHandler ();
            userContentController.AddScriptMessageHandler (scriptMessageHandler, "service");
            config.UserContentController = userContentController;

            // UIScreen screen = UIScreen.MainScreen;
            // RectangleF viewFrame = new RectangleF (new PointF (0, 0), new SizeF (320, 480));
            this.webView = new WKWebView (this.View.Frame, config);
            //log ("************************* UnityUI_iOSViewController_WKWebView this.View.Frame.Height: " + this.View.Frame.Height);
            log ("UnityUI_iOSViewController_WKWebView removing bounces on WKWebView.ScrollView.");
            this.webView.ScrollView.Bounces = false;   // TESTING REMOVING BOUNCYNG

            this.View.AddSubview (this.webView);
        }