private async Task UpdateHTMLPageToShowErrorAsync() { var errorData = GenerateErrorMessage(_viewModel.ErrorType); var jsToEvaluate = "ChangePageContent (" + $"'{errorData.Item1}'," + $"'{errorData.Item2}'," + " true)"; await HybridWebViewControl.EvaluateJavaScriptAsync(jsToEvaluate); }
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); }
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)); } }
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); }
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(); }
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(); }
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); }); }
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; }