Skip to content

Commit b35d459

Browse files
committed
WebView: Move initialization from dom-ready event to did-attach event.
This fixes the bug where the context menu would disappear immediately if the page had been loaded an even number of times. Fixes #662, fixes #991, fixes #1010. Signed-off-by: Anders Kaseorg <[email protected]>
1 parent 2ecb970 commit b35d459

File tree

2 files changed

+9
-7
lines changed

2 files changed

+9
-7
lines changed

app/renderer/js/components/webview.ts

+8-6
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export default class WebView {
4141
customCSS: string | false | null;
4242
$webviewsContainer: DOMTokenList;
4343
$el?: Electron.WebviewTag;
44-
domReady?: Promise<void>;
44+
whenAttached?: Promise<void>;
4545

4646
constructor(props: WebViewProps) {
4747
this.props = props;
@@ -78,9 +78,9 @@ export default class WebView {
7878

7979
init(): void {
8080
this.$el = generateNodeFromHTML(this.templateHTML()) as Electron.WebviewTag;
81-
this.domReady = new Promise((resolve) => {
81+
this.whenAttached = new Promise((resolve) => {
8282
this.$el!.addEventListener(
83-
"dom-ready",
83+
"did-attach",
8484
() => {
8585
resolve();
8686
},
@@ -98,7 +98,7 @@ export default class WebView {
9898
});
9999

100100
if (shouldSilentWebview) {
101-
this.$el!.addEventListener("dom-ready", () => {
101+
this.$el!.addEventListener("did-attach", () => {
102102
this.$el!.setAudioMuted(true);
103103
});
104104
}
@@ -140,14 +140,16 @@ export default class WebView {
140140
}
141141
});
142142

143-
this.$el!.addEventListener("dom-ready", () => {
143+
this.$el!.addEventListener("did-attach", () => {
144144
const webContents = remote.webContents.fromId(
145145
this.$el!.getWebContentsId(),
146146
);
147147
webContents.addListener("context-menu", (event, menuParameters) => {
148148
contextMenu(webContents, event, menuParameters);
149149
});
150+
});
150151

152+
this.$el!.addEventListener("dom-ready", () => {
151153
if (this.props.role === "server") {
152154
this.$el!.classList.add("onload");
153155
}
@@ -334,7 +336,7 @@ export default class WebView {
334336
channel: Channel,
335337
...args: Parameters<RendererMessage[Channel]>
336338
): Promise<void> {
337-
await this.domReady;
339+
await this.whenAttached;
338340
ipcRenderer.sendTo(this.$el!.getWebContentsId(), channel, ...args);
339341
}
340342
}

app/renderer/js/main.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1023,7 +1023,7 @@ class ServerManagerView {
10231023
webview.setAudioMuted(state);
10241024
} catch {
10251025
// Webview is not ready yet
1026-
webview.addEventListener("dom-ready", () => {
1026+
webview.addEventListener("did-attach", () => {
10271027
webview.setAudioMuted(state);
10281028
});
10291029
}

0 commit comments

Comments
 (0)