public async void LoadUrl(string?url) { Uri uri = new Uri(url ?? string.Empty, UriKind.RelativeOrAbsolute); if (!uri.IsAbsoluteUri) { await EnsureCoreWebView2Async(); CoreWebView2.SetVirtualHostNameToFolderMapping( LocalHostName, ApplicationPath, Web.WebView2.Core.CoreWebView2HostResourceAccessKind.Allow); uri = new Uri(LocalScheme + url, UriKind.RelativeOrAbsolute); } // TODO: Sync Cookies try { Source = uri; } catch (Exception exc) { Debug.WriteLine(nameof(MauiWebView), $"Failed to load: {uri} {exc}"); } }
internal async static Task <string> ExtractTextAsJson(CoreWebView2 webview, bool displayColoredRectangles) { var extractTextCommand = String.Format(JS_COMMAND, displayColoredRectangles.ToString().ToLower()); var jsonResult = await ExecuteJavascriptCodeAsync(webview, extractTextCommand); return(jsonResult); }
public async void ShouldInterceptRequest(CoreWebView2 view, CoreWebView2WebResourceRequestedEventArgs args) { //var uri = args.Request.RequestUri; var uri = new Uri(args.Request.Uri); int index; // walk up our multipart/related stack looking for the MIME part for the requested URL for (int i = stack.Count - 1; i >= 0; i--) { var related = stack[i]; if ((index = related.IndexOf(uri)) == -1) { continue; } if (related[index] is MimePart part) { var mimeType = part.ContentType.MimeType; var charset = part.ContentType.Charset; var stream = part.Content.Open(); // construct our response containing the decoded content // https://stackoverflow.com/questions/7669311/is-there-a-way-to-convert-a-system-io-stream-to-a-windows-storage-streams-irando var memStream = new MemoryStream(); await stream.CopyToAsync(memStream); memStream.Position = 0; args.Response = view.Environment.CreateWebResourceResponse(memStream.AsRandomAccessStream(), 200, "OK", $"Content-Type: {mimeType}; charset={charset}"); } } }
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 void BrowserWindow_ContainsFullScreenElementChanged(CoreWebView2 sender, object args) { var applicationView = ApplicationView.GetForCurrentView(); if (sender.ContainsFullScreenElement) { CommBar.Visibility = Visibility.Collapsed; TitleBar.Visibility = Visibility.Collapsed; if (applicationView.ViewMode == ApplicationViewMode.Default) { applicationView.TryEnterFullScreenMode(); } else if (applicationView.ViewMode == ApplicationViewMode.CompactOverlay) { // 281 = 500 * (9/16) bool success = applicationView.TryResizeView(new Windows.Foundation.Size(500, 281)); } } else { CommBar.Visibility = Visibility.Visible; TitleBar.Visibility = Visibility.Visible; if (applicationView.IsFullScreenMode) { applicationView.ExitFullScreenMode(); } else if (applicationView.ViewMode == ApplicationViewMode.CompactOverlay) { bool success = applicationView.TryResizeView(new Windows.Foundation.Size(500, 500)); // Max size } } }
internal static async Task <string> GetUniqueFileNameFromURLAsync(CoreWebView2 webview) { var url = await JavascriptInterop.ExecuteJavascriptCodeAsync(webview, "document.location.href"); var fileName = HtmlFileUtils.GetFileNameFromUri(url); return(fileName); }
public void Initialize(CoreWebView2 wv2) { this._tabItem.Initialize(wv2); this.CloseCommand.Subscribe(() => { this._tabItem.Close(); }); }
internal async static Task <PageElement> ExtractTextAsPageElementsAsync(CoreWebView2 webview, bool displayColoredRectangles) { var jsonResult = await ExtractTextAsJson(webview, displayColoredRectangles); var pageTree = ConvertJsonToPageElements(jsonResult); return(pageTree); }
public async void LoadHtml(string?html, string?baseUrl) { var mapBaseDirectory = false; if (string.IsNullOrEmpty(baseUrl)) { baseUrl = LocalScheme; mapBaseDirectory = true; } // Generate a base tag for the document var baseTag = $"<base href=\"{baseUrl}\"></base>"; string htmlWithBaseTag; // Set up an internal WebView we can use to load and parse the original HTML string // Make _internalWebView a field instead of local variable to avoid garbage collection _internalWebView = new WebView2(); // TODO: For now, the CoreWebView2 won't be created without either setting Source or // calling EnsureCoreWebView2Async(). await _internalWebView.EnsureCoreWebView2Async(); // When the 'navigation' to the original HTML string is done, we can modify it to include our <base> tag _internalWebView.NavigationCompleted += async(sender, args) => { // Generate a version of the <base> script with the correct <base> tag var script = BaseInsertionScript.Replace("baseTag", baseTag, StringComparison.Ordinal); // Run it and retrieve the updated HTML from our WebView await sender.ExecuteScriptAsync(script); htmlWithBaseTag = await sender.ExecuteScriptAsync("document.documentElement.outerHTML;"); htmlWithBaseTag = Regex.Unescape(htmlWithBaseTag); htmlWithBaseTag = htmlWithBaseTag.Remove(0, 1); htmlWithBaseTag = htmlWithBaseTag.Remove(htmlWithBaseTag.Length - 1, 1); await EnsureCoreWebView2Async(); if (mapBaseDirectory) { CoreWebView2.SetVirtualHostNameToFolderMapping( LocalHostName, ApplicationPath, Web.WebView2.Core.CoreWebView2HostResourceAccessKind.Allow); } // Set the HTML for the 'real' WebView to the updated HTML NavigateToString(!string.IsNullOrEmpty(htmlWithBaseTag) ? htmlWithBaseTag : html); // Free up memory after we're done with _internalWebView _internalWebView = null; }; // Kick off the initial navigation _internalWebView.NavigateToString(html); }
public void CompleteNewTabInitialize(CoreWebView2 coreWebView) { if (Def != null) { Args.NewWindow = coreWebView; Args.Handled = true; Def.Complete(); Def = null; } }
private async void NavigationStarting(CoreWebView2 coreWebView2, CoreWebView2NavigationStartingEventArgs args) { if (PixivAPI.Utils.CheckUrlLogin(args.Uri, out string code)) { var result = await Instances.Get <PixivAPI.AuthClient>().InitAuthToken(code, this.args !.CodeVerifier); Instances.Get <IAccountService>().Add(result); this.args.LoginSuccessCallback.Invoke(); } }
public void CompleteNewTabInitialize(CoreWebView2 coreWebView) { //When changing WPF Tab Items everything initializes again. if (Def != null) { Args.NewWindow = coreWebView; Args.Handled = true; Def.Complete(); Def = null; } }
// Create a new event monitor window that monitors events from // the provided WebView2 and its corresponding CoreWebView2. public EventMonitor(WebView2 webview2) { _webview2 = webview2; _coreWebView2 = webview2.CoreWebView2; InitializeComponent(); LayoutControls(); SubscribeToEvents(); }
public void Initialize(CoreWebView2 wv2) { if (this._isInitialized) { return; } this._webView2Handler.Initialize(wv2); this._webView2Handler.RegisterFilterFunc(url => this._tabInfomation.CanAccess(url)); this._webView2Handler.AddMessageHandler(this.OnMessage); this.OnInitialize(); this._isInitialized = true; }
public AsyncDataProviderInterface(CoreWebView2 webView) { _webView = webView; string channelJson = File.ReadAllText("ExternalData\\channelList.json"); //this.channelJson = channelJson; // To remove once null object situation is resolved. channelData = JsonConvert.DeserializeObject <List <VestelSdkChannelDefinition> >(channelJson); string JScode = ResourceLoader.GetJsResource("AsyncDataProviderInterface.js"); _webView.AddScriptToExecuteOnDocumentCreatedAsync(JScode); }
public void Initialize(CoreWebView2 wv2) { if (this.isInitialized) { return; } this.wv2 = wv2; this.ctx = SynchronizationContext.Current; this.wv2.AddWebResourceRequestedFilter("*", CoreWebView2WebResourceContext.All); this.wv2.WebResourceRequested += this.OnNavigate; this.isInitialized = true; }
public TableOfTime(CoreWebView2 vistaHtml, Chart diagrama, DataGridView grid) { this._vistaHtml = vistaHtml; this._diagrama = diagrama; this._grid = grid; this._vistaHtml.NavigationStarting += _vistaHtml_NavigationStarting; this._vistaHtml.ContentLoading += _vistaHtml_ContentLoading; this._vistaHtml.NavigationCompleted += _vistaHtml_NavigationCompleted; this._vistaHtml.DOMContentLoaded += _vistaHtml_DOMContentLoaded; this._vistaHtml.FrameNavigationCompleted += _vistaHtml_FrameNavigationCompleted; this._vistaHtml.FrameNavigationStarting += _vistaHtml_FrameNavigationStarting; this._vistaHtml.WebMessageReceived += _vistaHtml_WebMessageReceived; this._vistaHtml.WebResourceRequested += _vistaHtml_WebResourceRequested; this._vistaHtml.WebResourceResponseReceived += _vistaHtml_WebResourceResponseReceived; }
public static void DisableEdgeFeatures([NotNull] this CoreWebView2 coreWeb) { if (coreWeb == null) { throw new ArgumentNullException(nameof(coreWeb)); } coreWeb.Settings.AreDefaultContextMenusEnabled = false; coreWeb.Settings.IsZoomControlEnabled = false; coreWeb.Settings.AreDevToolsEnabled = false; coreWeb.Settings.AreDefaultScriptDialogsEnabled = false; coreWeb.Settings.IsBuiltInErrorPageEnabled = false; // Issue #145 fixed coreWeb.Settings.IsStatusBarEnabled = true; }
public MauiWebView() { NavigationStarting += (sender, args) => { // Auto map local virtual app dir host, e.g. if navigating back to local site from a link to an external site if (args?.Uri?.ToLowerInvariant().StartsWith(LocalScheme.TrimEnd('/').ToLowerInvariant()) == true) { CoreWebView2.SetVirtualHostNameToFolderMapping( LocalHostName, ApplicationPath, Web.WebView2.Core.CoreWebView2HostResourceAccessKind.Allow); } // Auto unmap local virtual app dir host if navigating to any other potentially unsafe domain else { CoreWebView2.ClearVirtualHostNameToFolderMapping(LocalHostName); } }; }
internal async static Task <string> ExecuteJavascriptCodeAsync(CoreWebView2 webview, string javascriptCode) { var executeScriptTask = webview.ExecuteScriptAsync(javascriptCode); if (await Task.WhenAny(executeScriptTask, Task.Delay(10000)) != executeScriptTask) { throw new Exception("Timeout error : waited more than 10 seconds for javascript call to finish"); } var result = executeScriptTask.Result; if (result.Length > 0 && result.StartsWith('"')) { return(result.Substring(1, result.Length - 2)); } else { return(result); } }
public static async Task WaitForWebViewReady(WebView2 wv2) { CoreWebView2 coreWebView2 = null; for (int i = 0; i < MaxWaitTimes; i++) { coreWebView2 = wv2.CoreWebView2; if (coreWebView2 != null) { break; } await Task.Delay(WaitTimeInMS); } if (coreWebView2 == null) { throw new Exception($"Waited {MaxWaitTimes * WaitTimeInMS}ms but couldn't get CoreWebView2 to be available."); } var domLoaded = false; var sem = new SemaphoreSlim(1); await sem.WaitAsync(); wv2.CoreWebView2.DOMContentLoaded += (s, e) => { domLoaded = true; sem.Release(); }; await Task.WhenAny(Task.Delay(1000), sem.WaitAsync()); if (!domLoaded) { throw new Exception($"Waited {MaxWaitTimes * WaitTimeInMS}ms but couldn't get CoreWebView2.DOMContentLoaded to complete."); } return; }
async Task InitializeAsync(string userDataFolder, ControlsBrowserTypes browserType, string navigationPath) { if (browserType == ControlsBrowserTypes.UIControlsBrowser) { //set up an Environment which we can then use for the Options Browser as well. ControlsCoreWebView2Environment = await Microsoft.Web.WebView2.Core.CoreWebView2Environment.CreateAsync(null, userDataFolder, null); } await EnsureCoreWebView2Async(ControlsCoreWebView2Environment); CoreWebView2.Settings.AreDevToolsEnabled = false; CoreWebView2.Settings.IsZoomControlEnabled = false; CoreWebView2.Settings.AreDefaultContextMenusEnabled = false; DefaultBackgroundColor = System.Drawing.Color.Transparent; ZoomFactorChanged += ControlsBrowser_ZoomFactorChanged; CoreWebView2.Navigate(navigationPath); if (browserType == ControlsBrowserTypes.OptionsControlsBrowser) { LostFocus += OptionsControlsBrowser_LostFocus; Visibility = System.Windows.Visibility.Hidden; } }
private void MainForm_Resize(object sender, EventArgs e) { addressTextBox.Width = toolStrip.Width - 30 * 5; size = (int)(this.Width / (1.5 * tabControl.Font.Size) / tabControl.TabCount); if (tabControl.TabCount > 0) { var page = tabControl.TabPages[tabControl.SelectedIndex]; foreach (var crl in page.Controls) { WebView2 browser = crl as WebView2; CoreWebView2 coreWebView2 = browser.CoreWebView2; var title = coreWebView2.DocumentTitle; if (title != null) { page.ToolTipText = title; if (title.Length > size) { title = title.Substring(0, size) + "..."; } page.Text = title; } } } }
public HTMLDateInputElement(CoreWebView2 coreWebView, string referenceId) : base(coreWebView, referenceId) { }
protected internal CSSCounterStyleRule(CoreWebView2 coreWebView, string referenceId) : base(coreWebView, referenceId) { }
protected internal HTMLHeadElement(CoreWebView2 coreWebView, string referenceId) : base(coreWebView, referenceId) { }
protected internal HTMLInputElementWithCheckednessBase(CoreWebView2 coreWebView, string referenceId) : base(coreWebView, referenceId) { }
protected internal SVGStringList(CoreWebView2 coreWebView, string referenceId) : base(coreWebView, referenceId) { }
protected internal CSSPerspective(CoreWebView2 coreWebView, string referenceId) : base(coreWebView, referenceId) { }
protected internal TextTrack(CoreWebView2 coreWebView, string referenceId) : base(coreWebView, referenceId) { }