private void DiscordForm_Load(object sender, EventArgs e) { try { CoreWebView2Environment.GetAvailableBrowserVersionString((string)null); webView2.add_NavigationCompleted((EventHandler <CoreWebView2NavigationCompletedEventArgs>)WebView2_NavigationCompleted); webView2.EnsureCoreWebView2Async((CoreWebView2Environment)null); webView2.add_CoreWebView2InitializationCompleted((EventHandler <CoreWebView2InitializationCompletedEventArgs>)WebView2_CoreWebView2InitializationCompleted); } catch { switch (MessageBox.Show("You don't have EdgeWebView installed! Do you want to download it?", OnProgramStart.Name, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation)) { case DialogResult.Yes: new WebClient().DownloadFile("https://go.microsoft.com/fwlink/p/?LinkId=2124703", Path.Combine(Path.GetTempPath(), "MicrosoftEdgeWebview2Setup.exe")); Process.Start(Path.Combine(Path.GetTempPath(), "MicrosoftEdgeWebview2Setup.exe")); Environment.Exit(1); break; case DialogResult.No: Close(); break; } } }
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; }
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); }
public (FrameworkElement, Size, string) GetViewer(FileInfo fileInfo) { var requestSize = new Size { Width = 1200, Height = 900 }; try { CoreWebView2Environment.GetAvailableBrowserVersionString(); var webView2 = new WebView2 { Source = new Uri(fileInfo.FullName, UriKind.Absolute) }; return(webView2, requestSize, WinExplorerHelper.GetSizeFormat(fileInfo.Length)); } catch (WebView2RuntimeNotFoundException) { var webBrowser = new WebBrowser { Source = new Uri(fileInfo.FullName, UriKind.Absolute) }; return(webBrowser, requestSize, WinExplorerHelper.GetSizeFormat(fileInfo.Length)); } }
/// <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); }
async void NavigateWithWebResourceRequestCmdExecuted(object target, ExecutedRoutedEventArgs e) { // Need CoreWebView2Environment if (_coreWebView2Environment == null) { _coreWebView2Environment = webView.CoreWebView2.Environment; } // Prepare post data as UTF-8 byte array and convert it to stream // as required by the application/x-www-form-urlencoded Content-Type var dialog = new TextInputDialog( title: "NavigateWithWebResourceRequest", description: "Specify post data to submit to https://www.w3schools.com/action_page.php."); if (dialog.ShowDialog() == true) { string postDataString = "input=" + dialog.Input.Text; UTF8Encoding utfEncoding = new UTF8Encoding(); byte[] postData = utfEncoding.GetBytes( postDataString); MemoryStream postDataStream = new MemoryStream(postDataString.Length); postDataStream.Write(postData, 0, postData.Length); postDataStream.Seek(0, SeekOrigin.Begin); CoreWebView2WebResourceRequest webResourceRequest = _coreWebView2Environment.CreateWebResourceRequest( "https://www.w3schools.com/action_page.php", "POST", postDataStream, "Content-Type: application/x-www-form-urlencoded\r\n"); webView.CoreWebView2.NavigateWithWebResourceRequest(webResourceRequest); } }
/// <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) { } }); }); }
public Tab(CoreWebView2Environment env, int id, bool shouldBeActive, BrowserWindow BrowserWin) { Tabid = id; MainBrowser = BrowserWin; ShouldBeActive = shouldBeActive; InitAsync(env, shouldBeActive); }
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 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 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; }
// Token: 0x06000011 RID: 17 RVA: 0x000021A0 File Offset: 0x000003A0 private void DiscordForm_Load(object sender, EventArgs e) { try { CoreWebView2Environment.GetAvailableBrowserVersionString(null); this.webView2.NavigationCompleted += this.WebView2_NavigationCompleted; this.webView2.EnsureCoreWebView2Async(null); this.webView2.CoreWebView2InitializationCompleted += this.WebView2_CoreWebView2InitializationCompleted; } catch { DialogResult dialogResult = MessageBox.Show("You don't have EdgeWebView installed! Do you want to download it?", OnProgramStart.Name, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation); if (dialogResult != DialogResult.Yes) { if (dialogResult == DialogResult.No) { base.Close(); } } else { new WebClient().DownloadFile("https://go.microsoft.com/fwlink/p/?LinkId=2124703", Path.Combine(Path.GetTempPath(), "MicrosoftEdgeWebview2Setup.exe")); Process.Start(Path.Combine(Path.GetTempPath(), "MicrosoftEdgeWebview2Setup.exe")); Environment.Exit(1); } } }
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(); } }
public void SetVirtualHostName(string virtualHostName, string folderName) { string version = CoreWebView2Environment.GetAvailableBrowserVersionString(); this.CheckIfInitialized(); this.ctx?.Post(_ => this.wv2 !.SetVirtualHostNameToFolderMapping(virtualHostName, folderName, CoreWebView2HostResourceAccessKind.Allow), null); }
public WinUICoreWebView2WebResourceRequestedEventArgsWrapper(CoreWebView2Environment environment, CoreWebView2WebResourceRequestedEventArgs webResourceRequestedEventArgs) { _environment = environment; _webResourceRequestedEventArgs = webResourceRequestedEventArgs; Request = new WinUICoreWebView2WebResourceRequestWrapper(webResourceRequestedEventArgs); ResourceContext = (CoreWebView2WebResourceContextWrapper)webResourceRequestedEventArgs.ResourceContext; }
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 static string GetWebView2Version() { try { return(CoreWebView2Environment.GetAvailableBrowserVersionString()); } catch (Exception) { return(""); } }
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); }
public static bool IsWebView2Available() { try { return(!string.IsNullOrEmpty(CoreWebView2Environment.GetAvailableBrowserVersionString())); } catch (Exception) { return(false); } }
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 static bool IsEdgiumAvailable() { try { string edgeVersion = CoreWebView2Environment.GetAvailableBrowserVersionString(); return(!string.IsNullOrEmpty(edgeVersion)); } catch { return(false); } }
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); }
public static bool IsWebViewSupported() { try { return(!string.IsNullOrEmpty(CoreWebView2Environment.GetAvailableBrowserVersionString())); } catch (WebView2RuntimeNotFoundException) { return(false); } }
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 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(); " ); }; }
public static bool IsWebView2Available() { try { return(!string.IsNullOrEmpty(CoreWebView2Environment.GetAvailableBrowserVersionString(Path.Combine(App.LocalDataPath, @"Microsoft.WebView2.FixedVersionRuntime\\")))); } catch (Exception) { return(false); } }
/// <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) { 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); }