async void InitializeWebViewAsync(WebView2 webView, SettingLoader setting) { if (setting != null) { string userDataPath = setting.Settings.UserDataPath; if (!System.IO.Directory.Exists(userDataPath)) { System.IO.Directory.CreateDirectory(userDataPath); } string argment = null; if (!string.IsNullOrEmpty(setting.Settings.CachePath)) { argment = $"--disk-cache-dir=\"{setting.Settings.CachePath}\""; } CoreWebView2EnvironmentOptions options = new CoreWebView2EnvironmentOptions(argment); var environment = await CoreWebView2Environment.CreateAsync(userDataFolder : userDataPath, options : options); await webView.EnsureCoreWebView2Async(environment); } webView.Source = new Uri(setting?.Settings.HomePage ?? "https://www.google.com"); WebViewController.sliderPan.ValueChanged += sliderPan_ValueChanged; WebViewController.sliderVolume.ValueChanged += sliderVolume_ValueChanged; webView.CoreWebView2.SourceChanged += CoreWebView2_SourceChanged; webView.CoreWebView2.NewWindowRequested += CoreWebView2_NewWindowRequested; }
/// <summary> /// Adds a WebView2 Control to Control Collection. /// </summary> /// <param name="svgData">Svg to display on Browser Control.</param> private void AddWebViewControl(string svgData) { _browser = new WebView2(); _browser.Dock = DockStyle.Fill; ConfiguredTaskAwaitable <CoreWebView2Environment> .ConfiguredTaskAwaiter webView2EnvironmentAwaiter = CoreWebView2Environment .CreateAsync(userDataFolder: System.Environment.GetEnvironmentVariable("USERPROFILE") + "\\AppData\\LocalLow\\Microsoft\\PowerToys\\SvgPreview-Temp") .ConfigureAwait(true).GetAwaiter(); webView2EnvironmentAwaiter.OnCompleted(() => { InvokeOnControlThread(async() => { try { _webView2Environment = webView2EnvironmentAwaiter.GetResult(); await _browser.EnsureCoreWebView2Async(_webView2Environment).ConfigureAwait(true); await _browser.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync("window.addEventListener('contextmenu', window => {window.preventDefault();});"); _browser.CoreWebView2.SetVirtualHostNameToFolderMapping(VirtualHostName, AssemblyDirectory, CoreWebView2HostResourceAccessKind.Allow); _browser.CoreWebView2.Settings.AreDefaultScriptDialogsEnabled = false; _browser.NavigateToString(svgData); Controls.Add(_browser); } catch (NullReferenceException) { } }); }); }
private void MainForm_Load(object sender, EventArgs e) { var userDataDir = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "User Data"; var ua = "GoogleTV/CloudMoe-Version (DISKTOP; Windows NT " + Environment.OSVersion.Version.ToString() + "; Wired) Cobalt/" + runtimeVersion + " (unlike Gecko) html5_enable_androidtv_cobalt_widevine html5_enable_cobalt_experimental_vp9_decoder"; // var ua = "GoogleTV/10.0 (Windows NT 10.0; Cobalt; Wired) html5_enable_androidtv_cobalt_widevine html5_enable_cobalt_experimental_vp9_decoder"; //var ua = "Mozilla/5.0 (WINDOWS 10.0), GAME_XboxSeriesX/10.0.18363.7196 (Microsoft, Xbox Series X, Wired)"; //var ua = "Mozilla/5.0 (SMART-TV; Linux; Tizen 5.5) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/3.0 Chrome/69.0.3497.106 TV Safari/537.36"; //var ua = "Mozilla/5.0 (PlayStation 4 7.51) AppleWebKit/605.1.15 (KHTML, like Gecko)"; //var ua = "Mozilla/5.0 (Nintendo Switch; WebApplet) AppleWebKit/606.4 (KHTML, like Gecko) NF/6.0.1.16.10 NintendoBrowser/5.1.0.20923"; //var options = new CoreWebView2EnvironmentOptions("--disable-web-security --enable-features=msPlayReadyWin10 --user-agent=\"Mozilla/5.0 (Windows NT 10.0; Win64; x64; Xbox; Xbox Series X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36 Edge/20.02\""); //var options = new CoreWebView2EnvironmentOptions("--enable-features=msMediaFoundationClearPlaybackWin10,msPlayReadyWin10 --user-agent=\"Mozilla/5.0 (Windows NT 10.0; Win64; x64; Xbox; Xbox Series X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36 Edge/20.02\""); var options = new CoreWebView2EnvironmentOptions(startupArgs + "--allow-failed-policy-fetch-for-test --allow-running-insecure-content --disable-web-security --user-agent=\"" + ua + "\""); // Mozilla/5.0 (WINDOWS 10.0) Cobalt/19.lts.4.196747-gold (unlike Gecko) v8/6.5.254.43 gles Starboard/10, GAME_XboxOne/10.0.18363.7196 (Microsoft, XboxOne X, Wired) coreWebView2Environment = CoreWebView2Environment.CreateAsync(runtimePath, userDataDir, options).Result; splashScreenWebView = new WebView2(); screenWebView = new WebView2(); screenWebView.Enabled = false; screenWebViewPanel.Visible = false; splashScreenWebViewPanel.Visible = false; screenWebViewPanel.Controls.Add(screenWebView); splashScreenWebViewPanel.Controls.Add(splashScreenWebView); InitializeSplashScreenAsync(); }
async void InitializeWebView() { string version = GetWebView2Version(); var isAltKeyPressed = (Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt)); if (version == "" || isAltKeyPressed) { PromptToInstallWebview2(); return; } this.Title = $"Focalboard (port {port} WebView {version})"; // must create a data folder if running out of a secured folder that can't write like Program Files var env = await CoreWebView2Environment.CreateAsync( userDataFolder : Path.Combine(Path.GetTempPath(), "Focalboard") ); await webView.EnsureCoreWebView2Async(env); webView.ContentLoading += WebView_ContentLoading; var url = String.Format("http://localhost:{0}", port); webView.Source = new Uri(url); }
private void AMain_Load(object sender, EventArgs e) { var envir = CoreWebView2Environment.CreateAsync(null, Settings.ResourcePath).Result; Main_browser.EnsureCoreWebView2Async(envir); if (Settings.P_BrowserAddress != "") { Main_browser.NavigationCompleted += Main_browser_NavigationCompleted; Main_browser.Source = new Uri(Settings.P_BrowserAddress); } RepairOldFiles(); Launch_pb.Enabled = false; ProgressCurrent_pb.Width = 5; TotalProg_pb.Width = 5; Version_label.Text = string.Format("Build: {0}.{1}.{2}", Globals.ProductCodename, Settings.UseTestConfig ? "Debug" : "Release", Application.ProductVersion); if (Settings.P_ServerName != String.Empty) { Name_label.Visible = true; Name_label.Text = Settings.P_ServerName; } _workThread = new Thread(Start) { IsBackground = true }; _workThread.Start(); }
private async void NewTab(string startUrl) { TabPage page = new TabPage("新标签页") { Padding = new Padding(0, 0, 0, 0) }; WebView2 browser = new WebView2 { Source = new Uri(startUrl), Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top | AnchorStyles.Bottom, Dock = DockStyle.Fill }; CoreWebView2Environment ev = await CoreWebView2Environment.CreateAsync(null, AppContext.BaseDirectory); await browser.EnsureCoreWebView2Async(ev); CoreWebView2 coreWebView2 = browser.CoreWebView2; //Event Start coreWebView2.SourceChanged += (s, e) => { BeginInvoke(new Action(() => { addressTextBox.Text = coreWebView2.Source; })); }; coreWebView2.DocumentTitleChanged += (s, e) => { BeginInvoke(new Action(() => { var title = coreWebView2.DocumentTitle; if (title != null) { if (tabControl.SelectedTab == page) { Text = coreWebView2.DocumentTitle + " - " + _mainTitle; } page.ToolTipText = title; if (title.Length > size) { title = title.Substring(0, size) + "..."; } page.Text = title; } })); }; refreshToolStripButton.Image = CloseImage; refreshToolStripButton.Click += stopRefreshToolStripButton_Click; coreWebView2.NavigationCompleted += (s, e) => { refreshToolStripButton.Image = RefreshImage; refreshToolStripButton.Click += refreshToolStripButton_Click; }; coreWebView2.NewWindowRequested += OnNewWindowRequested; page.Controls.Add(browser); tabControl.TabPages.Add(page); tabControl.SelectedTab = page; }
private async void InitializeBrowser() { // Must create the environment and set the application data to somewhere writable. I.e. user's // local AppData directory. And you must do this before attempting to navigate the browser to an // address. try { var env = await CoreWebView2Environment.CreateAsync(Global.EdgeFolder, Global.AppDataLocation); await browser.EnsureCoreWebView2Async(env); browser.Source = new Uri("https://music.youtube.com/", UriKind.Absolute); } catch (Exception e) { MainForm.SetConnectToYouTubeButtonEnabled(false); MainForm.ShowMessageBox( "WebView2 Error", $"{Environment.NewLine}It looks like Canary Edge Core never finished installing. {Environment.NewLine}{Environment.NewLine}" + $"Please delete the folder: {Global.EdgeFolder} and then restart this application. If the error persists, then this application " + $"has been built wrong. Please see the 'WARNING' in file: 'Dialogues/ConnectToYTMusics." + $"{Environment.NewLine}{Environment.NewLine}The application will reinstall automatically once restarted." + $"{Environment.NewLine}{Environment.NewLine}Exception: {e.Message}" + $"{Environment.NewLine}{Environment.NewLine}YT Music Uploader will now exit.", MessageBoxButtons.OK, MessageBoxIcon.Error, 320); Process.GetCurrentProcess().Kill(); } }
/// <summary> /// Programatically initialize the WebView2Wrapper component. /// </summary> public async void InitializeWebView(DockPanel docker) { _webView = new Microsoft.Web.WebView2.Wpf.WebView2(); // clear everything in the WPF dock panel container docker.Children.Clear(); docker.Children.Add(_webView); // initialize the webview 2 instance try { _webView.CoreWebView2InitializationCompleted += OnWebViewInitializationCompleted; CoreWebView2Environment env = await CoreWebView2Environment.CreateAsync(null, ExecutingLocation); await _webView.EnsureCoreWebView2Async(env); _webView.WebMessageReceived += OnWebViewInteraction; _webView.NavigationCompleted += OnWebViewNavigationCompleted; //InitializeDevToolsProtocolHelper(); //SubscribeToDocumentUpdated(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public WebView2Browser(string url = "about:blank") { browser = new WebView2(); browser.NavigationCompleted += Browser_DocumentCompleted; var createTask = CoreWebView2Environment.CreateAsync(null, PreferenceManager.WebView2UserDataPath, null); createTask.Wait(); environment = createTask.Result; browser.CoreWebView2InitializationCompleted += (sender, e) => { browser.CoreWebView2.AddWebResourceRequestedFilter("*", CoreWebView2WebResourceContext.All); browser.CoreWebView2.WebResourceRequested += CoreWebView2_WebResourceRequested; browser.CoreWebView2.Settings.IsZoomControlEnabled = false; #if !DEBUG browser.CoreWebView2.Settings.AreDevToolsEnabled = false; #endif browser.CoreWebView2.Settings.IsStatusBarEnabled = false; browser.CoreWebView2.Settings.AreDefaultContextMenusEnabled = false; // Due to a bug in WebView2 (https://github.com/MicrosoftEdge/WebView2Feedback/issues/721) // Setting e.Handled in KeyDown won't work as how Microsoft advertised it. // So reflection has to be used, in order to directly subscribe to the AcceleratorKeyPressed event. // Why can't Microsoft do their things right? CoreWebView2Controller controller = (CoreWebView2Controller)browser.GetType().GetField("_coreWebView2Controller", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(browser); controller.AcceleratorKeyPressed += Controller_AcceleratorKeyPressed; }; browser.KeyDown += Browser_KeyDown; browser.WebMessageReceived += Browser_WebMessageReceived; browser.EnsureCoreWebView2Async(environment); Navigate(url); }
private async void SetupBrowser() { CoreWebView2EnvironmentOptions options = new CoreWebView2EnvironmentOptions("--proxy-server=\"localhost:8000\"", "ja"); CoreWebView2Environment env = await CoreWebView2Environment.CreateAsync(null, null, options); await LoginBrowser.EnsureCoreWebView2Async(env); }
private async void InitializeAsync() { string localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); string cacheFolder = Path.Combine(localAppData, "WindowsFormsWebView2"); var environment = await CoreWebView2Environment.CreateAsync(null, cacheFolder); await _browser.EnsureCoreWebView2Async(environment); }
private async void LoadMain() { var env = await CoreWebView2Environment.CreateAsync(null, "C:\\temp"); await webView.EnsureCoreWebView2Async(env); webView.Source = new Uri("http://example.com"); }
private async void InitAsync() { var env = await CoreWebView2Environment.CreateAsync(null, @"C:\temp\edgechromium"); await webView.EnsureCoreWebView2Async(env); //webView.Source = new Uri("https://smartemailer365.azurewebsites.net/"); webView.Source = new Uri("https://www.microsoft.com/"); }
private async Task InitializeWebView2() { var options = new CoreWebView2EnvironmentOptions(); options.AdditionalBrowserArguments = "--remote-debugging-port=8077"; var env = await CoreWebView2Environment.CreateAsync(null, null, options); await this.webView2Control.EnsureCoreWebView2Async(env); }
private async Task InitializeWebView2() { var environment = await CoreWebView2Environment.CreateAsync(); await _webview.EnsureCoreWebView2Async(environment); ApplyDefaultWebViewSettings(); _webview.CoreWebView2.AddWebResourceRequestedFilter($"{AppOrigin}*", CoreWebView2WebResourceContext.All); _webview.CoreWebView2.WebResourceRequested += (sender, eventArgs) => { // Unlike server-side code, we get told exactly why the browser is making the request, // so we can be smarter about fallback. We can ensure that 'fetch' requests never result // in fallback, for example. var allowFallbackOnHostPage = eventArgs.ResourceContext == CoreWebView2WebResourceContext.Document || eventArgs.ResourceContext == CoreWebView2WebResourceContext.Other; // e.g., dev tools requesting page source if (TryGetResponseContent(eventArgs.Request.Uri, allowFallbackOnHostPage, out var statusCode, out var statusMessage, out var content, out var headers)) { // NOTE: This is stream copying is to work around a hanging bug in WinRT with managed streams var memStream = new MemoryStream(); content.CopyTo(memStream); var ms = new InMemoryRandomAccessStream(); ms.WriteAsync(memStream.GetWindowsRuntimeBuffer()).AsTask().Wait(); var headerString = GetHeaderString(headers); eventArgs.Response = environment.CreateWebResourceResponse(ms, statusCode, statusMessage, headerString); } }; // The code inside blazor.webview.js is meant to be agnostic to specific webview technologies, // so the following is an adaptor from blazor.webview.js conventions to WebView2 APIs await _webview.CoreWebView2 !.AddScriptToExecuteOnDocumentCreatedAsync(@" window.external = { sendMessage: message => { window.chrome.webview.postMessage(message); }, receiveMessage: callback => { window.chrome.webview.addEventListener('message', e => callback(e.data)); } }; "); _webview.CoreWebView2.WebMessageReceived += (sender, eventArgs) => MessageReceived(new Uri(eventArgs.Source), eventArgs.TryGetWebMessageAsString()); _webview.CoreWebView2.DOMContentLoaded += async(_, __) => { await _webview.CoreWebView2 !.ExecuteScriptAsync(@" Blazor.start(); " ); }; }
private async Task InitWebview() { environment = await CoreWebView2Environment.CreateAsync(); await webview.EnsureCoreWebView2Async(environment); webview.CoreWebView2.DocumentTitleChanged += (s, t) => { TitleChanged?.Invoke(this, webview.CoreWebView2.DocumentTitle); }; string initScript = Resources.GetInitScript("Edgium"); await webview.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync(initScript); }
private async Task HandleElementChangedAsync(ElementChangedEventArgs <WebViewExtended> e) { if (e.OldElement != null) { throw new NotSupportedException("On WPF, we need to retain the association between WebView elements and renderers, so switching to a different element isn't supported."); } if (e.NewElement != null) { if (Control != null) { throw new NotSupportedException("On WPF, we need to retain the association between WebView elements and renderers, so switching to a different element isn't supported."); } if (e.NewElement.RetainedNativeControl is WebView2 retainedNativeControl) { SetNativeControl(retainedNativeControl); SubscribeToControlEvents(); } else { var nativeControl = new WebView2() { MinHeight = 200 }; e.NewElement.RetainedNativeControl = nativeControl; SetNativeControl(nativeControl); var defaultPrivateWebView2InstallFolder = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "WebView2"); var privateWebView2InstallFolder = Directory.Exists(defaultPrivateWebView2InstallFolder) ? defaultPrivateWebView2InstallFolder : null; _coreWebView2Environment = await CoreWebView2Environment.CreateAsync(privateWebView2InstallFolder).ConfigureAwait(true); await nativeControl.EnsureCoreWebView2Async(_coreWebView2Environment).ConfigureAwait(true); await Control.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync("window.external = { sendMessage: function(message) { window.chrome.webview.postMessage(message); }, receiveMessage: function(callback) { window.chrome.webview.addEventListener(\'message\', function(e) { callback(e.data); }); } };").ConfigureAwait(true); await Control.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync(LoadBlazorJSScript).ConfigureAwait(true); SubscribeToControlEvents(); Load(); } SubscribeToElementEvents(); // There is a weird bug in WebView2 where on 200% DPI it does not redraw the WebView2 until you // send a WM_WINDOWPOSCHANGING message to the child window that serves as a host for WebView2. // this sends the required message. Control.UpdateWindowPos(); } base.OnElementChanged(e); }
/// <summary> /// Initialize webview2 /// </summary> public async static void InitializeWebview2() { if (!StaticReferences.IsWebView2Enabled) { return; } var webViewData = ISettingsManager.GetWebViewDataPath(); Directory.CreateDirectory(webViewData); Helpers.Helpers.objCoreWebView2Environment = await CoreWebView2Environment.CreateAsync(null, webViewData, null); }
private async Task HandleElementChangedAsync(ElementChangedEventArgs <WebViewExtended> e) { if (e.OldElement != null) { Element.SendMessageFromJSToDotNetRequested -= OnSendMessageFromJSToDotNetRequested; } if (e.NewElement != null) { if (Control == null) { try { #pragma warning disable CA2000 // Dispose objects before losing scope; this object's lifetime is managed elsewhere var nativeControl = new WebView2() { MinHeight = 200 }; #pragma warning restore CA2000 // Dispose objects before losing scope SetNativeControl(nativeControl); _coreWebView2Environment = await CoreWebView2Environment.CreateAsync().ConfigureAwait(true); await nativeControl.EnsureCoreWebView2Async(_coreWebView2Environment).ConfigureAwait(true); await Control.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync("window.external = { sendMessage: function(message) { window.chrome.webview.postMessage(message); }, receiveMessage: function(callback) { window.chrome.webview.addEventListener(\'message\', function(e) { callback(e.data); }); } };").ConfigureAwait(true); await Control.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync(LoadBlazorJSScript).ConfigureAwait(true); } #pragma warning disable CA1031 // Do not catch general exception types catch (Exception ex) #pragma warning restore CA1031 // Do not catch general exception types { e.NewElement.ErrorHandler?.HandleException(ex); return; } SubscribeToControlEvents(); } Load(); SubscribeToElementEvents(); // There is a weird bug in WebView2 where on 200% DPI it does not redraw the WebView2 until you // send a WM_WINDOWPOSCHANGING message to the child window that serves as a host for WebView2. // this sends the required message. Control.UpdateWindowPos(); } base.OnElementChanged(e); }
async private void MainForm_Load(object sender, EventArgs e) { // Load asset comboboxes comboBoxImageLarge.Items.Add("(None)"); comboBoxImageLarge.SelectedIndex = 0; comboBoxImageSmall.Items.Add("(None)"); comboBoxImageSmall.SelectedIndex = 0; // Load applications foreach (Program.DiscordApplication app in Program.Applications) { comboBoxApp.Items.Add(app.Name); } comboBoxApp.SelectedIndex = -1; // Load presets foreach (Program.Preset preset in Program.Presets) { comboBoxPreset.Items.Add(preset.Name); } comboBoxPreset.SelectedIndex = 0; // triggers ReloadCurrentPreset() // Load Web browser (Edge) webView.Width = 400; webView.Height = this.Height; webView.Location = new System.Drawing.Point((this.Width - webView.Width) / 2, 0); webView.Hide(); this.Controls.Add(webView); CoreWebView2Environment webViewEnv = await CoreWebView2Environment.CreateAsync(null, Program.appDataPath); await webView.EnsureCoreWebView2Async(webViewEnv); webView.NavigationCompleted += WebView_NavigationCompletedAsync; webView.CoreWebView2.WebResourceResponseReceived += CoreWebView2_WebResourceResponseReceived; // Debug /*DateTime time = DateTime.UtcNow.AddHours((double)numericUpDownHours.Value); * long timestamp = new DateTimeOffset(time).ToUnixTimeSeconds(); * * textBoxTimestampEnd.Text = timestamp.ToString(); * Start = textBoxTimestampStart.Text != "" && Int32.TryParse(textBoxTimestampStart.Text, out TimestampStart) ? new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(TimestampStart) : DateTime.UtcNow */ }
// Form.Loaded private async void StartWorkLoaded(object sender, EventArgs e) { try { var env = await CoreWebView2Environment.CreateAsync(null, Path.Combine(PathFactory.GetAppDataPath(), Resx.ProgramName)); await webView.EnsureCoreWebView2Async(env); await startup(webView); } catch (Exception exc) { Logger.Current.WriteLine(exc.Message, exc); } }
async void InitializeAsync() { var browserFolder = Path.Combine(mmApp.Configuration.CommonFolder, "WebView_Browser"); // must create a data folder if running out of a secured folder that can't write like Program Files var env = await CoreWebView2Environment.CreateAsync( userDataFolder : browserFolder ); await WebBrowser.EnsureCoreWebView2Async(env); if (Model.Configuration.System.ShowDeveloperToolsOnStartup) { WebBrowser.CoreWebView2.OpenDevToolsWindow(); } }
async void InitializeAsync() { //string userdataPath = "C:\\Users\\tachen\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 1"; //string userdataPath = "C:\\Users\\tachen\\AppData\\Local\\Microsoft\\Edge\\User Data\\Profile 4"; string userdataPath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "WebView2WorkDir"); if (!Directory.Exists(userdataPath)) { Directory.CreateDirectory(userdataPath); } //CoreWebView2EnvironmentOptions options = new CoreWebView2EnvironmentOptions("--profile-directory=Profile 4"); var webView2Environment = await CoreWebView2Environment.CreateAsync(null, userdataPath, null); await webViewMain.EnsureCoreWebView2Async(webView2Environment); }
private async void WebBrowserView_Loaded(object sender, RoutedEventArgs e) { if (Environment == null) { string userDataFolder = Path.Combine(Path.GetTempPath(), AppDomain.CurrentDomain.FriendlyName); Environment = await CoreWebView2Environment.CreateAsync(null, userDataFolder, EnvironmentOptions); } if (!String.IsNullOrEmpty(Uri)) { await WebView.EnsureCoreWebView2Async(Environment); WebView.CoreWebView2.Navigate(Uri); } }
private async Task DoStart() { _coreWebView2Environment = await CoreWebView2Environment.CreateAsync().ConfigureAwait(true); await _webView2.EnsureCoreWebView2Async(_coreWebView2Environment).ConfigureAwait(true); await _webView2.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync("window.external = { sendMessage: function(message) { window.chrome.webview.postMessage(message); }, receiveMessage: function(callback) { window.chrome.webview.addEventListener(\'message\', function(e) { callback(e.data); }); } };").ConfigureAwait(true); await _webView2.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync(LoadBlazorJSScript).ConfigureAwait(true); SubscribeToControlEvents(); Load(); SubscribeToElementEvents(); }
/// <summary> /// Webview2 初始化 /// </summary> /// <param name="webview">Microsoft.Web.WebView2.WinForms.WebView2</param> /// <param name="browserExecutableFolder">browserExecutableFolder</param> /// <param name="userDataFolder">userDataFolder</param> /// <param name="options">CoreWebView2EnvironmentOptions</param> /// <param name="func">Func</param> public async Task InitializeWebview2Async(Microsoft.Web.WebView2.WinForms.WebView2 webview, string browserExecutableFolder = null, string userDataFolder = null, CoreWebView2EnvironmentOptions options = null, Func <AppRuntime> func = null) { userDataFolder = userDataFolder ?? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "UserData"); AppRuntime.RunTime.WebView2Environment = await CoreWebView2Environment.CreateAsync(browserExecutableFolder, userDataFolder, options); await webview.EnsureCoreWebView2Async(AppRuntime.RunTime.WebView2Environment); if (func != null) { webview.Invoke(func); } }
private async void InitializeWebView() { var tempFolder = Path.GetTempPath(); var webView2UserDataFolder = Path.Combine(tempFolder, WebView2UserDataFolder); try { webView2Environment = await CoreWebView2Environment.CreateAsync(null, webView2UserDataFolder); } catch (WebView2RuntimeNotFoundException) { MessageBox.Show("The WebView2 isn't installed. It is required for this app."); Environment.Exit(-1); } await webview.EnsureCoreWebView2Async(webView2Environment); }
private async void IssueFileForm_Load(object sender, EventArgs e) { CoreWebView2EnvironmentOptions options = new CoreWebView2EnvironmentOptions() { AllowSingleSignOnUsingOSPrimaryAccount = true, }; CoreWebView2Environment environment = await CoreWebView2Environment.CreateAsync(null, _userDataFolder, options).ConfigureAwait(true); await this.fileIssueBrowser.EnsureCoreWebView2Async(environment).ConfigureAwait(true); this.fileIssueBrowser.NavigationCompleted += NavigationComplete; this.TopMost = makeTopMost; Navigate(this.Url); this.fileIssueBrowser.CoreWebView2.HistoryChanged += CoreWebView2_HistoryChanged; }
public BrowserInstance(BrowserInstanceSettings settings, string profilePath) { _settings = settings; _profilePath = profilePath; var webViewOptions = new CoreWebView2EnvironmentOptions("--disable-web-security"); _webView = new WebView2(); _webView.EnsureCoreWebView2Async( CoreWebView2Environment.CreateAsync(userDataFolder: $"UserDataFolder.{settings.Profile}", options: webViewOptions).GetAwaiter().GetResult()); _webView.NavigationCompleted += WebView_NavigationCompleted; _webView.NavigationStarting += WebView_NavigationStarting; _webView.CoreWebView2InitializationCompleted += WebView_CoreWebView2Ready; _webView.DefaultBackgroundColor = System.Drawing.Color.Transparent; LoadSettings(); _webView.Source = settings.Url; }
public async Task Init(Settings setting, MoeSite site) { Site = site; DataContext = setting; Closing += OnClosing; this.SetWindowFluent(setting); try { MainBrowser.CoreWebView2InitializationCompleted += MainBrowserOnCoreWebView2InitializationCompleted; if (MainBrowser == null) { return; } var option = new CoreWebView2EnvironmentOptions(); switch (NetOperator.GetProxyMode(setting, site.SiteSettings)) { case Settings.ProxyModeEnum.None: option.AdditionalBrowserArguments = "--no-proxy-server"; break; case Settings.ProxyModeEnum.Custom: option.AdditionalBrowserArguments = $"--proxy-server=http://{setting.ProxySetting}"; break; case Settings.ProxyModeEnum.Ie: break; } Environment = await CoreWebView2Environment.CreateAsync(null, App.AppDataDir, option); AuthButton.Click += AuthButtonOnClick; GoToLoginPageButton.Click += GoToLoginPageButtonOnClick; var _ = MainBrowser.EnsureCoreWebView2Async(Environment); } catch (Exception ex) { var result = MessageBox.Show(this, "未找到WebView2组件,需要下载吗?(需要Webview2组件才能显示网页登录界面)", App.DisplayName, MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) { "https://go.microsoft.com/fwlink/p/?LinkId=2124703".GoUrl(); } Ex.Log(ex); Close(); } }