Browse Source

fix: <webview> focus / blur events don't work with contextIsolation enabled (#29025)

Co-authored-by: Milan Burda <[email protected]>
trop[bot] 4 years ago
parent
commit
20a43d9a72
2 changed files with 23 additions and 1 deletions
  1. 1 1
      lib/renderer/web-view/web-view-impl.ts
  2. 22 0
      spec-main/webview-spec.ts

+ 1 - 1
lib/renderer/web-view/web-view-impl.ts

@@ -162,7 +162,7 @@ export class WebViewImpl {
 
   // Emits focus/blur events.
   onFocusChange () {
-    const hasFocus = document.activeElement === this.webviewNode;
+    const hasFocus = this.webviewNode.ownerDocument.activeElement === this.webviewNode;
     if (hasFocus !== this.hasFocus) {
       this.hasFocus = hasFocus;
       this.dispatchEvent(hasFocus ? 'focus' : 'blur');

+ 22 - 0
spec-main/webview-spec.ts

@@ -721,5 +721,27 @@ describe('<webview> tag', function () {
       })`);
       expect(message).to.equal('hi');
     });
+
+    it('emits focus event when contextIsolation is enabled', async () => {
+      const w = new BrowserWindow({
+        show: false,
+        webPreferences: {
+          webviewTag: true,
+          contextIsolation: true
+        }
+      });
+      await w.loadURL('about:blank');
+      await w.webContents.executeJavaScript(`new Promise((resolve, reject) => {
+        const webview = new WebView()
+        webview.setAttribute('src', 'about:blank')
+        webview.addEventListener('dom-ready', () => {
+          webview.focus()
+        })
+        webview.addEventListener('focus', () => {
+          resolve();
+        })
+        document.body.appendChild(webview)
+      })`);
+    });
   });
 });