From c7d2dabbc3e1fa40dbb58a809226d126e83083ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yannik=20H=C3=B6flich?= Date: Sun, 5 Dec 2021 16:31:32 +0100 Subject: [PATCH 1/2] changed the usage of loadUrl at CreateWindowAsync: adds protocol, host and port. You can also insert the port with {port} --- ElectronNET.API/WindowManager.cs | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/ElectronNET.API/WindowManager.cs b/ElectronNET.API/WindowManager.cs index 4ac85dab..b9c1b386 100644 --- a/ElectronNET.API/WindowManager.cs +++ b/ElectronNET.API/WindowManager.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; +using System.Text.RegularExpressions; using System.Threading.Tasks; namespace ElectronNET.API @@ -79,7 +80,7 @@ public bool IsQuitOnWindowAllClosed /// /// The load URL. /// - public async Task CreateWindowAsync(string loadUrl = "http://localhost") + public async Task CreateWindowAsync(string loadUrl = "http://localhost:{port}") { return await CreateWindowAsync(new BrowserWindowOptions(), loadUrl); } @@ -90,10 +91,9 @@ public async Task CreateWindowAsync(string loadUrl = "http://loca /// The options. /// The load URL. /// - public Task CreateWindowAsync(BrowserWindowOptions options, string loadUrl = "http://localhost") + public Task CreateWindowAsync(BrowserWindowOptions options, string loadUrl = "http://localhost:{port}") { var taskCompletionSource = new TaskCompletionSource(); - BridgeConnector.Socket.On("BrowserWindowCreated", (id) => { BridgeConnector.Socket.Off("BrowserWindowCreated"); @@ -119,10 +119,7 @@ public Task CreateWindowAsync(BrowserWindowOptions options, strin } }); - if (loadUrl.ToUpper() == "HTTP://LOCALHOST") - { - loadUrl = $"{loadUrl}:{BridgeSettings.WebPort}"; - } + loadUrl = ParseLoadUrl(loadUrl); // Workaround Windows 10 / Electron Bug // https://github.com/electron/electron/issues/4045 @@ -159,6 +156,22 @@ public Task CreateWindowAsync(BrowserWindowOptions options, strin return taskCompletionSource.Task; } + private string ParseLoadUrl(string loadUrl) + { + var match = Regex.Match(loadUrl, @"(ht|f)tp(s?)\:\/\/([a-z]+\.)+[a-z]+"); + if (!match.Success || match.Index != 0) + { + match = Regex.Match(loadUrl, @"([a-z]+\.)+[a-z]+"); + if (!match.Success || match.Index != 0) + loadUrl = "localhost:{port}" + loadUrl; + loadUrl = "http://" + loadUrl; + } + + loadUrl = Regex.Replace(loadUrl, @"\{(P|p)(O|o)(R|r)(T|t)\}", BridgeSettings.WebPort); + + return loadUrl; + } + private bool isWindows10() { return RuntimeInformation.OSDescription.Contains("Windows 10"); From 0d9483e3257a648a2e52ae33520f3f0d3cb0b9ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yannik=20H=C3=B6flich?= Date: Wed, 8 Dec 2021 17:30:44 +0100 Subject: [PATCH 2/2] Updated TryParseLoadUrl with UriBuilder for better readability --- ElectronNET.API/WindowManager.cs | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/ElectronNET.API/WindowManager.cs b/ElectronNET.API/WindowManager.cs index b9c1b386..bf4ddf06 100644 --- a/ElectronNET.API/WindowManager.cs +++ b/ElectronNET.API/WindowManager.cs @@ -80,7 +80,7 @@ public bool IsQuitOnWindowAllClosed /// /// The load URL. /// - public async Task CreateWindowAsync(string loadUrl = "http://localhost:{port}") + public async Task CreateWindowAsync(string loadUrl = "/") { return await CreateWindowAsync(new BrowserWindowOptions(), loadUrl); } @@ -91,7 +91,7 @@ public async Task CreateWindowAsync(string loadUrl = "http://loca /// The options. /// The load URL. /// - public Task CreateWindowAsync(BrowserWindowOptions options, string loadUrl = "http://localhost:{port}") + public Task CreateWindowAsync(BrowserWindowOptions options, string loadUrl = "/") { var taskCompletionSource = new TaskCompletionSource(); BridgeConnector.Socket.On("BrowserWindowCreated", (id) => @@ -119,7 +119,10 @@ public Task CreateWindowAsync(BrowserWindowOptions options, strin } }); - loadUrl = ParseLoadUrl(loadUrl); + if(!TryParseLoadUrl(loadUrl, out loadUrl)) + { + throw new ArgumentException($"Unable to parse {loadUrl}", nameof(loadUrl)); + } // Workaround Windows 10 / Electron Bug // https://github.com/electron/electron/issues/4045 @@ -156,20 +159,18 @@ public Task CreateWindowAsync(BrowserWindowOptions options, strin return taskCompletionSource.Task; } - private string ParseLoadUrl(string loadUrl) + + private bool TryParseLoadUrl(string loadUrl, out string parsedUrl) { - var match = Regex.Match(loadUrl, @"(ht|f)tp(s?)\:\/\/([a-z]+\.)+[a-z]+"); - if (!match.Success || match.Index != 0) - { - match = Regex.Match(loadUrl, @"([a-z]+\.)+[a-z]+"); - if (!match.Success || match.Index != 0) - loadUrl = "localhost:{port}" + loadUrl; - loadUrl = "http://" + loadUrl; + Uri BaseUri = new Uri($"http://localhost:{BridgeSettings.WebPort}"); + if (Uri.TryCreate(loadUrl, UriKind.Absolute, out var url) || + Uri.TryCreate(BaseUri, loadUrl, out url)) { + var uri = new UriBuilder(url.ToString()); + parsedUrl = uri.ToString(); + return true; } - - loadUrl = Regex.Replace(loadUrl, @"\{(P|p)(O|o)(R|r)(T|t)\}", BridgeSettings.WebPort); - - return loadUrl; + parsedUrl = loadUrl; + return false; } private bool isWindows10()