Browse Source

fix: handle asynchronous URL loading in bw proxy (#23776)

Shelley Vohr 4 years ago
parent
commit
f78504515b
3 changed files with 10 additions and 6 deletions
  1. 4 4
      docs/api/web-contents.md
  2. 5 1
      lib/renderer/window-setup.ts
  3. 1 1
      spec-main/api-browser-window-spec.ts

+ 4 - 4
docs/api/web-contents.md

@@ -907,10 +907,10 @@ Returns `String` - The URL of the current web page.
 ```javascript
 const { BrowserWindow } = require('electron')
 let win = new BrowserWindow({ width: 800, height: 600 })
-win.loadURL('http://github.com')
-
-let currentURL = win.webContents.getURL()
-console.log(currentURL)
+win.loadURL('http://github.com').then(() => {
+  const currentURL = win.webContents.getURL()
+  console.log(currentURL)
+})
 ```
 
 #### `contents.getTitle()`

+ 5 - 1
lib/renderer/window-setup.ts

@@ -125,7 +125,11 @@ class LocationProxy {
   }
 
   private getGuestURL (): URL | null {
-    const urlString = this._invokeWebContentsMethodSync('getURL') as string;
+    const maybeURL = this._invokeWebContentsMethodSync('getURL') as string;
+
+    // When there's no previous frame the url will be blank, so accountfor that here
+    // to prevent url parsing errors on an empty string.
+    const urlString = maybeURL !== '' ? maybeURL : 'about:blank';
     try {
       return new URL(urlString);
     } catch (e) {

+ 1 - 1
spec-main/api-browser-window-spec.ts

@@ -4128,7 +4128,7 @@ describe('BrowserWindow module', () => {
         window.postMessage({openedLocation}, '*')
       `);
       const [, data] = await p;
-      expect(data.pageContext.openedLocation).to.equal('');
+      expect(data.pageContext.openedLocation).to.equal('about:blank');
     });
   });