コード例 #1
0
        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;
                }
            }
        }
コード例 #2
0
        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;
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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));
            }
        }
コード例 #5
0
ファイル: WebView2Wrapper.cs プロジェクト: ymg2007/gh-web-ui
        /// <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);
            }
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
            }
        }
コード例 #8
0
        /// <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)
                    {
                    }
                });
            });
        }
コード例 #9
0
 public Tab(CoreWebView2Environment env, int id, bool shouldBeActive, BrowserWindow BrowserWin)
 {
     Tabid          = id;
     MainBrowser    = BrowserWin;
     ShouldBeActive = shouldBeActive;
     InitAsync(env, shouldBeActive);
 }
コード例 #10
0
        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();
        }
コード例 #11
0
        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();
        }
コード例 #12
0
        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;
        }
コード例 #13
0
 // 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);
         }
     }
 }
コード例 #14
0
        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();
            }
        }
コード例 #15
0
        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;
        }
コード例 #17
0
        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);
        }
コード例 #18
0
 private static string GetWebView2Version()
 {
     try
     {
         return(CoreWebView2Environment.GetAvailableBrowserVersionString());
     }
     catch (Exception) { return(""); }
 }
コード例 #19
0
        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);
        }
コード例 #20
0
ファイル: Helper.cs プロジェクト: SplitGemini/QuickLook
 public static bool IsWebView2Available()
 {
     try
     {
         return(!string.IsNullOrEmpty(CoreWebView2Environment.GetAvailableBrowserVersionString()));
     }
     catch (Exception) { return(false); }
 }
コード例 #21
0
        private async void LoadMain()
        {
            var env = await CoreWebView2Environment.CreateAsync(null, "C:\\temp");

            await webView.EnsureCoreWebView2Async(env);

            webView.Source = new Uri("http://example.com");
        }
コード例 #22
0
ファイル: Form1.cs プロジェクト: VikasJaigude/vsto-add-in
        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/");
        }
コード例 #23
0
 private static bool IsEdgiumAvailable()
 {
     try
     {
         string edgeVersion = CoreWebView2Environment.GetAvailableBrowserVersionString();
         return(!string.IsNullOrEmpty(edgeVersion));
     }
     catch { return(false); }
 }
コード例 #24
0
        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);
        }
コード例 #25
0
 public static bool IsWebViewSupported()
 {
     try
     {
         return(!string.IsNullOrEmpty(CoreWebView2Environment.GetAvailableBrowserVersionString()));
     }
     catch (WebView2RuntimeNotFoundException)
     {
         return(false);
     }
 }
コード例 #26
0
        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);
        }
コード例 #27
0
        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();
					"                    );
            };
        }
コード例 #28
0
 public static bool IsWebView2Available()
 {
     try
     {
         return(!string.IsNullOrEmpty(CoreWebView2Environment.GetAvailableBrowserVersionString(Path.Combine(App.LocalDataPath, @"Microsoft.WebView2.FixedVersionRuntime\\"))));
     }
     catch (Exception)
     {
         return(false);
     }
 }
コード例 #29
0
ファイル: Initializations.cs プロジェクト: q4a/Wolven-kit
        /// <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);
        }
コード例 #30
0
        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);
        }