Avoid hub iframe overlay on embed shell tab switches.

Use in-shell content loading state instead of parent postMessage so tab changes do not trigger the full instance-frame loading mask.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-24 01:23:40 +08:00
parent 4ad335ca84
commit bced61b9d7
4 changed files with 13 additions and 15 deletions
+2 -2
View File
@@ -6,7 +6,7 @@
<script src="/static/instance_theme.js?v=17"></script>
<link rel="stylesheet" href="/static/instance_theme_early.css?v=4">
<link rel="stylesheet" href="/static/account_risk_badge.css?v=3">
<link rel="stylesheet" href="/static/instance_page.css?v=1">
<link rel="stylesheet" href="/static/instance_page.css?v=2">
<link rel="stylesheet" href="/static/instance_theme.css?v=18">
<script src="/static/account_risk_badge.js?v=3"></script>
<meta name="theme-color" content="#0b0d14">
@@ -115,6 +115,6 @@
<script src="/static/manual_order_rr_preview.js?v=3"></script>
<script src="/static/key_monitor_form.js?v=1"></script>
{% include 'embed_boot_scripts.html' %}
<script src="/static/instance_embed.js?v=1"></script>
<script src="/static/instance_embed.js?v=2"></script>
</body>
</html>
+1
View File
@@ -3368,6 +3368,7 @@
const d = ev.data;
if (!d || typeof d !== "object") return;
if (d.type === "instance-frame-navigating") {
if (d.embedShellTab) return;
setInstanceFrameNavLoading(true);
} else if (d.type === "instance-frame-ready") {
setInstanceFrameNavLoading(false);
+8 -13
View File
@@ -33,16 +33,9 @@
return "";
}
function notifyParentNavStart() {
try {
window.parent.postMessage({ type: "instance-frame-navigating" }, "*");
} catch (_) {}
}
function notifyParentReady() {
try {
window.parent.postMessage({ type: "instance-frame-ready" }, "*");
} catch (_) {}
function setRootLoading(on) {
const root = document.getElementById("embed-page-root");
if (root) root.classList.toggle("is-embed-tab-loading", !!on);
}
function setNavActive(tab) {
@@ -99,7 +92,7 @@
if (!tab || loadingTab) return;
const token = ++navToken;
loadingTab = true;
notifyParentNavStart();
setRootLoading(true);
try {
const qs = listWindowQueryString();
const url = "/api/embed/page/" + encodeURIComponent(tab) + (qs ? "?" + qs : "");
@@ -122,7 +115,7 @@
} finally {
if (token === navToken) {
loadingTab = false;
notifyParentReady();
setRootLoading(false);
}
}
}
@@ -214,7 +207,9 @@
patchHardNavigations();
bindNav();
runPageInit(getTab());
notifyParentReady();
try {
window.parent.postMessage({ type: "instance-frame-ready" }, "*");
} catch (_) {}
}
global.InstanceEmbed = {
+2
View File
@@ -218,3 +218,5 @@
.stats-period-block:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}
.stats-period-block h3{font-size:1rem;color:#dbe4ff;margin-bottom:4px}
.stats-period-block .sub{font-size:.78rem;color:#8892b0;margin-bottom:10px;line-height:1.4}
#embed-page-root{transition:opacity .12s ease}
#embed-page-root.is-embed-tab-loading{opacity:.55;pointer-events:none}