From 840fd99bbb6f8b0389be4c00ddaea09fd6290f5a Mon Sep 17 00:00:00 2001 From: Jeffrey Chen <78434827+TCOTC@users.noreply.github.com> Date: Sat, 10 Jan 2026 19:47:30 +0800 Subject: [PATCH] :art: Auto-close browser page when publish service is closed https://github.com/siyuan-note/siyuan/issues/16587#issuecomment-3698421929 (#16804) --- app/src/index.ts | 4 ++++ app/src/mobile/index.ts | 4 ++++ app/src/util/processMessage.ts | 24 +++++++++++++++++++ kernel/model/auth.go | 12 ++++++++++ kernel/server/proxy/publish.go | 5 ++-- kernel/server/serve.go | 7 ++++++ kernel/util/websocket.go | 44 +++++++++++++++++++++++++++++++++- 7 files changed, 97 insertions(+), 3 deletions(-) diff --git a/app/src/index.ts b/app/src/index.ts index 51eb8358f..fbb711f9f 100644 --- a/app/src/index.ts +++ b/app/src/index.ts @@ -27,6 +27,7 @@ import {initMessage} from "./dialog/message"; import {getAllTabs} from "./layout/getAll"; import {getLocalStorage} from "./protyle/util/compatibility"; import {getSearch} from "./util/functions"; +import {checkPublishServiceClosed} from "./util/processMessage"; import {hideAllElements} from "./protyle/ui/hideElements"; import {loadPlugins, reloadPlugin} from "./plugin/loader"; import "./assets/scss/base.scss"; @@ -46,6 +47,9 @@ export class App { public appId: string; constructor() { + if (checkPublishServiceClosed()) { + return; + } registerServiceWorker(`${Constants.SERVICE_WORKER_PATH}?v=${Constants.SIYUAN_VERSION}`); addBaseURL(); diff --git a/app/src/mobile/index.ts b/app/src/mobile/index.ts index d0c91ea77..d3c0d40b2 100644 --- a/app/src/mobile/index.ts +++ b/app/src/mobile/index.ts @@ -18,6 +18,7 @@ import {hideKeyboardToolbar, showKeyboardToolbar} from "./util/keyboardToolbar"; import {getLocalStorage, writeText} from "../protyle/util/compatibility"; import {getCurrentEditor, openMobileFileById} from "./editor"; import {getSearch} from "../util/functions"; +import {checkPublishServiceClosed} from "../util/processMessage"; import {initRightMenu} from "./menu"; import {openChangelog} from "../boot/openChangelog"; import {registerServiceWorker} from "../util/serviceWorker"; @@ -37,6 +38,9 @@ class App { public appId: string; constructor() { + if (checkPublishServiceClosed()) { + return; + } registerServiceWorker(`${Constants.SERVICE_WORKER_PATH}?v=${Constants.SIYUAN_VERSION}`); addBaseURL(); this.appId = Constants.SIYUAN_APPID; diff --git a/app/src/util/processMessage.ts b/app/src/util/processMessage.ts index 649d3793c..00bfd4c69 100644 --- a/app/src/util/processMessage.ts +++ b/app/src/util/processMessage.ts @@ -5,6 +5,7 @@ import {hideMessage, showMessage} from "../dialog/message"; import {setStorageVal} from "../protyle/util/compatibility"; import {Constants} from "../constants"; import {fetchPost} from "./fetch"; +import {isBrowser} from "./functions"; export const processMessage = (response: IWebSocketData) => { if ("msg" === response.cmd) { @@ -61,6 +62,10 @@ export const processMessage = (response: IWebSocketData) => { } return false; } + if ("closepublishpage" === response.cmd) { + handlePublishServiceClosed(response.msg); + return false; + } // 小于 0 为提示:-2 提示;-1 报错,大于 0 的错误需处理,等于 0 的为正常操作 if (response.code < 0) { @@ -70,3 +75,22 @@ export const processMessage = (response: IWebSocketData) => { return response; }; + +export const handlePublishServiceClosed = (msg: string) => { + if (isBrowser()) { + sessionStorage.setItem("siyuanPublishServiceClosed", msg || ""); + window.location.reload(); + } +}; + +export const checkPublishServiceClosed = (): boolean => { + if (isBrowser()) { + const publishServiceClosedMsg = sessionStorage.getItem("siyuanPublishServiceClosed"); + if (publishServiceClosedMsg) { + sessionStorage.removeItem("siyuanPublishServiceClosed"); + document.body.innerHTML = `