diff --git a/ElectronNET.API/WindowManager.cs b/ElectronNET.API/WindowManager.cs index b9c1b38..bf4ddf0 100644 --- a/ElectronNET.API/WindowManager.cs +++ b/ElectronNET.API/WindowManager.cs @@ -80,7 +80,7 @@ namespace ElectronNET.API /// /// 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 @@ namespace ElectronNET.API /// 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 @@ namespace ElectronNET.API } }); - 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 @@ namespace ElectronNET.API 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()