private async Task UpdateHTMLPageToShowErrorAsync()
        {
            var errorData    = GenerateErrorMessage(_viewModel.ErrorType);
            var jsToEvaluate = "ChangePageContent (" +
                               $"'{errorData.Item1}'," +
                               $"'{errorData.Item2}'," +
                               " true)";

            await HybridWebViewControl.EvaluateJavaScriptAsync(jsToEvaluate);
        }
Пример #2
0
        public JavascriptInternet()
        {
            InitializeComponent();

            InjectionText.Text = "document.body.style.backgroundColor = \"red\";";
            GlobalText.Text    = "globalCallback('Hello from Javascript!');";
            LocalText.Text     = "localCallback('Hello from Javascript!');";

            HybridWebViewControl.AddGlobalCallback("globalCallback", GlobalCallback);
            WebContent.AddLocalCallback("localCallback", LocalCallback);
        }
Пример #3
0
        private async void OnCallbackAdded(object sender, string e)
        {
            if (Element == null || string.IsNullOrWhiteSpace(e))
            {
                return;
            }

            if ((sender == null && Element.EnableGlobalCallbacks) || sender != null)
            {
                await OnJavascriptInjectionRequestAsync(HybridWebViewControl.GenerateFunctionScript(e));
            }
        }
Пример #4
0
        public JavascriptString()
        {
            InitializeComponent();

            WebContent.Source  = "<!doctype html><html><head></head><body><h1>String Data Example</h1></body></html>";
            InjectionText.Text = "document.body.style.backgroundColor = \"red\";";
            GlobalText.Text    = "globalCallback('Hello from Javascript!');";
            LocalText.Text     = "localCallback('Hello from Javascript!');";

            HybridWebViewControl.AddGlobalCallback("globalCallback", GlobalCallback);
            WebContent.AddLocalCallback("localCallback", LocalCallback);
        }
Пример #5
0
        private void DestroyOldElement(HybridWebViewControl element)
        {
            element.PropertyChanged -= OnWebViewPropertyChanged;
            element.OnJavascriptInjectionRequest -= OnJavascriptInjectionRequestAsync;
            element.OnClearCookiesRequested      -= OnClearCookiesRequest;
            element.OnBackRequested -= OnBackRequested;
            element.OnGetAllCookiesRequestedAsync -= OnGetAllCookieRequestAsync;
            element.OnGetCookieRequestedAsync     -= OnGetCookieRequestAsync;
            element.OnSetCookieRequestedAsync     -= OnSetCookieRequestAsync;
            element.OnForwardRequested            -= OnForwardRequested;
            element.OnRefreshRequested            -= OnRefreshRequested;

            element.Dispose();
        }
Пример #6
0
        private void SetupNewElement(HybridWebViewControl element)
        {
            element.PropertyChanged += OnWebViewPropertyChanged;
            element.OnJavascriptInjectionRequest  += OnJavascriptInjectionRequestAsync;
            element.OnClearCookiesRequested       += OnClearCookiesRequest;
            element.OnGetAllCookiesRequestedAsync += OnGetAllCookieRequestAsync;
            element.OnGetCookieRequestedAsync     += OnGetCookieRequestAsync;
            element.OnSetCookieRequestedAsync     += OnSetCookieRequestAsync;
            element.OnBackRequested    += OnBackRequested;
            element.OnForwardRequested += OnForwardRequested;
            element.OnRefreshRequested += OnRefreshRequested;

            SetSource();
        }
        public override async void OnPageFinished(Android.Webkit.WebView view, string url)
        {
            if (_reference == null || !_reference.TryGetTarget(out var renderer))
            {
                return;
            }
            if (renderer.Element == null)
            {
                return;
            }

            // Add Injection Function
            await renderer.OnJavascriptInjectionRequest(HybridWebViewControl.InjectedFunction);

            // Add Global Callbacks
            if (renderer.Element.EnableGlobalCallbacks)
            {
                foreach (var callback in HybridWebViewControl.GlobalRegisteredCallbacks)
                {
                    await renderer.OnJavascriptInjectionRequest(HybridWebViewControl.GenerateFunctionScript(callback.Key));
                }
            }

            // Add Local Callbacks
            foreach (var callback in renderer.Element.LocalRegisteredCallbacks)
            {
                await renderer.OnJavascriptInjectionRequest(HybridWebViewControl.GenerateFunctionScript(callback.Key));
            }

            renderer.Element.CanGoBack    = view.CanGoBack();
            renderer.Element.CanGoForward = view.CanGoForward();
            renderer.Element.Navigating   = false;

            renderer.Element.HandleNavigationCompleted(url);
            renderer.Element.HandleContentLoaded();
        }
Пример #8
0
        public HomePage([Optional] string url)
        {
            InitializeComponent();

            if (Device.RuntimePlatform == Device.iOS && !string.IsNullOrWhiteSpace(url) && url.StartsWith("safe://"))
            {
                _launchUrl = url;
            }

            AddressBarEntry.Focused     += AddressBarEntryFocused;
            AddressBarEntry.Unfocused   += AddressBarEntryUnfocused;
            AddressBarEntry.TextChanged += AddressBarEntryTextChanged;
            AddressBarEntry.Completed   += AddressBarTextChangeCompleted;

            MessagingCenter.Subscribe <BookmarksModalPageViewModel, string>(
                this,
                MessageCenterConstants.BookmarkUrl,
                (sender, args) =>
            {
                _viewModel.LoadUrl(args);
            });
            MessagingCenter.Subscribe <App, string>(
                this,
                MessageCenterConstants.LoadSafeWebsite,
                (sender, args) =>
            {
                _viewModel.LoadUrl(args);
            });
            MessagingCenter.Subscribe <MenuPopUpViewModel>(
                this,
                MessageCenterConstants.ReloadMessage,
                (sender) =>
            {
                _viewModel.IsNavigating = true;
                _viewModel.ReloadCommand.Execute(null);
            });
            MessagingCenter.Subscribe <HomePageViewModel>(
                this,
                MessageCenterConstants.ShowErrorPage,
                async(sender) =>
            {
                if (((UrlWebViewSource)HybridWebViewControl.Source).Url != _viewModel.WelcomePageUrl)
                {
                    HybridWebViewControl.Source = _viewModel.WelcomePageUrl;
                }
                else
                {
                    await UpdateHTMLPageToShowErrorAsync();
                    _viewModel.IsErrorState = false;
                    if (_viewModel.IsNavigating)
                    {
                        _viewModel.IsNavigating = false;
                    }
                }
            });
            MessagingCenter.Subscribe <HomePageViewModel>(
                this,
                MessageCenterConstants.UpdateErrorMsg,
                async(sender) =>
            {
                await UpdateHTMLPageToShowErrorAsync();
            });
            MessagingCenter.Subscribe <App>(
                this,
                MessageCenterConstants.InitialiseSession,
                async(sender) =>
            {
                await _viewModel.InitilizeSessionAsync();
            });
            MessagingCenter.Subscribe <App>(
                this,
                MessageCenterConstants.SessionReconnect,
                async(sender) =>
            {
                if (App.AppSession.IsDisconnected)
                {
                    await ReconnectSessionAsync();
                }
            });
            MessagingCenter.Subscribe <App>(
                this,
                MessageCenterConstants.UpdateWelcomePageTheme,
                async(sender) =>
            {
                var theme        = Xamarin.Essentials.Preferences.Get(Constants.AppThemePreferenceKey, false);
                var jsToEvaluate = "ChangeBackgroundColor (" + $"'{theme.ToString()}'" + ")";
                await HybridWebViewControl.EvaluateJavaScriptAsync(jsToEvaluate);
            });
        }
Пример #9
0
        public HomePage([Optional] string url)
        {
            InitializeComponent();

            if (Device.RuntimePlatform == Device.iOS && !string.IsNullOrWhiteSpace(url) && url.StartsWith("safe://"))
            {
                _launchUrl = url;
            }

            AddressBarEntry.Focused     += AddressBarEntryFocused;
            AddressBarEntry.Unfocused   += AddressBarEntryUnfocused;
            AddressBarEntry.TextChanged += AddressBarEntryTextChanged;
            AddressBarEntry.Completed   += AddressBarTextChangeCompleted;

            MessagingCenter.Subscribe <App, string>(
                this,
                MessageCenterConstants.LoadSafeWebsite,
                (sender, args) =>
            {
                _viewModel.LoadUrl(args);
            });
            MessagingCenter.Subscribe <MenuPopUpViewModel>(
                this,
                MessageCenterConstants.ReloadMessage,
                (sender) =>
            {
                _viewModel.IsNavigating = true;
                _viewModel.ReloadCommand.Execute(null);
            });
            MessagingCenter.Subscribe <HomePageViewModel>(
                this,
                MessageCenterConstants.ShowErrorPage,
                async(sender) =>
            {
                if (((UrlWebViewSource)HybridWebViewControl.Source).Url != _viewModel.WelcomePageUrl)
                {
                    HybridWebViewControl.Source = _viewModel.WelcomePageUrl;
                }
                else
                {
                    await UpdateHTMLPageToShowErrorAsync();
                    _viewModel.IsErrorState = false;
                    if (_viewModel.IsNavigating)
                    {
                        _viewModel.IsNavigating = false;
                    }
                }
            });
            MessagingCenter.Subscribe <HomePageViewModel>(
                this,
                MessageCenterConstants.UpdateErrorMsg,
                async(sender) =>
            {
                await UpdateHTMLPageToShowErrorAsync();
            });
            MessagingCenter.Subscribe <App>(
                this,
                MessageCenterConstants.InitialiseSession,
                async(sender) =>
            {
                await _viewModel.InitilizeSessionAsync();
            });
            MessagingCenter.Subscribe <App>(
                this,
                MessageCenterConstants.SessionReconnect,
                async(sender) =>
            {
                if (App.AppSession.IsDisconnected)
                {
                    await ReconnectSessionAsync();
                }
            });
            MessagingCenter.Subscribe <App>(
                this,
                MessageCenterConstants.UpdateWelcomePageTheme,
                async(sender) =>
            {
                try
                {
                    var theme        = Xamarin.Essentials.Preferences.Get(Constants.AppThemePreferenceKey, false);
                    var jsToEvaluate = "ChangeBackgroundColor (" + $"'{theme}'" + ")";
                    await HybridWebViewControl?.EvaluateJavaScriptAsync(jsToEvaluate);
                }
                catch (Exception ex)
                {
                    Logger.Error(ex);
                }
            });
            MessagingCenter.Subscribe <AuthenticationService>(
                this,
                MessageCenterConstants.Authenticated,
                (sender) =>
            {
                _viewModel.UpdateAuthenticationState();
            });

            // Todo: Required to add no internet connection status in the top navigation bar
            // MessagingCenter.Subscribe<App>(
            //    this,
            //    MessageCenterConstants.NoInternet,
            //    (sender) =>
            //    {
            //        _viewModel.UpdateAuthenticationState(true);
            //    });

            HybridWebViewControl.Navigated += HybridWebViewControl_NavigatedAsync;
        }