Skip to content

Commit 1ce338c

Browse files
committed
fix: open links in os browser default
1 parent 4a6836e commit 1ce338c

1 file changed

Lines changed: 29 additions & 1 deletion

File tree

src/main.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { app, BrowserWindow, ipcMain } from 'electron';
1+
import { app, BrowserWindow, ipcMain, shell } from 'electron';
22
import path from 'node:path';
33
import fs from 'node:fs/promises';
44
import started from 'electron-squirrel-startup';
@@ -8,6 +8,30 @@ if (started) app.quit();
88

99
let notesDir: string;
1010

11+
// Open http/https links in the user's default browser instead of navigating
12+
// the Electron window (or spawning an in-app browser window).
13+
const openExternalIfHttp = (url: string): boolean => {
14+
if (/^https?:\/\//i.test(url)) {
15+
void shell.openExternal(url);
16+
return true;
17+
}
18+
return false;
19+
};
20+
21+
const attachExternalLinkHandlers = (win: BrowserWindow) => {
22+
win.webContents.setWindowOpenHandler(({ url }) => {
23+
openExternalIfHttp(url);
24+
return { action: 'deny' };
25+
});
26+
win.webContents.on('will-navigate', (event, url) => {
27+
// Allow same-origin navigation (e.g. Vite HMR reloads); send links that
28+
// point elsewhere to the default browser.
29+
const currentOrigin = new URL(win.webContents.getURL() || 'about:blank').origin;
30+
if (new URL(url).origin === currentOrigin) return;
31+
if (openExternalIfHttp(url)) event.preventDefault();
32+
});
33+
};
34+
1135
const createWindow = () => {
1236
const mainWindow = new BrowserWindow({
1337
width: 1100,
@@ -17,6 +41,8 @@ const createWindow = () => {
1741
},
1842
});
1943

44+
attachExternalLinkHandlers(mainWindow);
45+
2046
if (MAIN_WINDOW_VITE_DEV_SERVER_URL) {
2147
mainWindow.loadURL(MAIN_WINDOW_VITE_DEV_SERVER_URL);
2248
} else {
@@ -57,6 +83,8 @@ ipcMain.on('open-note-window', (_, noteId: string) => {
5783
},
5884
});
5985

86+
attachExternalLinkHandlers(win);
87+
6088
if (MAIN_WINDOW_VITE_DEV_SERVER_URL) {
6189
win.loadURL(`${MAIN_WINDOW_VITE_DEV_SERVER_URL}?windowNoteId=${noteId}`);
6290
} else {

0 commit comments

Comments
 (0)