From 574d7a09147c66d176b0cdcde5f186a0b1240510 Mon Sep 17 00:00:00 2001 From: GuoRuqiang <61670021+guoruqiang@users.noreply.github.com> Date: Sun, 22 Sep 2024 14:09:03 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8postMessage=E5=90=91iframe?= =?UTF-8?q?=E4=BC=A0=E5=8F=82theme-mode=EF=BC=8C=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E5=AD=90=E9=A1=B5=E9=9D=A2=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD=20=E5=AD=90=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E7=9A=84js=E7=A4=BA=E4=BE=8B=20```=20 ``` --- web/src/components/HeaderBar.js | 10 ++++++++-- web/src/pages/Home/index.js | 13 +++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/web/src/components/HeaderBar.js b/web/src/components/HeaderBar.js index b7cf9061..981a34fb 100644 --- a/web/src/components/HeaderBar.js +++ b/web/src/components/HeaderBar.js @@ -118,13 +118,19 @@ const HeaderBar = () => { useEffect(() => { if (theme === 'dark') { document.body.setAttribute('theme-mode', 'dark'); + } else { + document.body.removeAttribute('theme-mode'); + } + // 发送当前主题模式给子页面 + const iframe = document.querySelector('iframe'); + if (iframe) { + iframe.contentWindow.postMessage({ themeMode: theme }, '*'); } if (isNewYear) { console.log('Happy New Year!'); } - }, []); - + }, [theme]); // 监听 theme-mode 的变化 return ( <> diff --git a/web/src/pages/Home/index.js b/web/src/pages/Home/index.js index 38029528..ad7cba32 100644 --- a/web/src/pages/Home/index.js +++ b/web/src/pages/Home/index.js @@ -35,6 +35,19 @@ const Home = () => { } setHomePageContent(content); localStorage.setItem('home_page_content', content); + + // 如果内容是 URL,则发送主题模式 + if (data.startsWith('https://')) { + const iframe = document.querySelector('iframe'); + if (iframe) { + const theme = localStorage.getItem('theme-mode') || 'light'; + // 测试是否正确传递theme-mode给iframe + // console.log('Sending theme-mode to iframe:', theme); + iframe.onload = () => { + iframe.contentWindow.postMessage({ themeMode: theme }, '*'); + }; + } + } } else { showError(message); setHomePageContent('加载首页内容失败...');