Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions main.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,24 +97,42 @@ const vaultWindows = new Set(),
else showWindows();
};

// 全局变量,用于标记是否通过点击链接触发导航
let isLinkNavigation = false;

const onWindowClose = (event) => event.preventDefault(),
onWindowUnload = (event) => {
if (isLinkNavigation) {
// 重置标记以避免影响后续事件
isLinkNavigation = false;
return;
}

log(LOG_WINDOW_CLOSE);
getCurrentWindow().hide();
event.stopImmediatePropagation();
// setting return value manually is more reliable than
// via `return false` according to electron
event.returnValue = false;
},
onAnchorClick = (event) => {
const target = event.target.closest('a');
if (target && target.getAttribute('target') !== '_blank') {
// 如果是 <a> 元素且没有 target="_blank",标记为链接导航
isLinkNavigation = true;
}
},
interceptWindowClose = () => {
// intercept in renderer
document.addEventListener('click', onAnchorClick);
window.addEventListener("beforeunload", onWindowUnload, true);
// intercept in main: is asynchronously executed when registered
// from renderer, so won't prevent close by itself, but counteracts
// the 3-second delayed window force close in obsidian.asar/main.js
getCurrentWindow().on("close", onWindowClose);
},
allowWindowClose = () => {
document.removeEventListener('click', onAnchorClick);
getCurrentWindow().removeListener("close", onWindowClose);
window.removeEventListener("beforeunload", onWindowUnload, true);
};
Expand Down