diff --git a/javascript/DatabaseTool.html b/javascript/DatabaseTool.html index e8e0564..b43bec9 100644 --- a/javascript/DatabaseTool.html +++ b/javascript/DatabaseTool.html @@ -208,7 +208,7 @@ .quick-create-table:hover{opacity:0.9} - +
\ No newline at end of file diff --git a/src/main/java/com/axis/innovators/box/browser/BrowserWindow.java b/src/main/java/com/axis/innovators/box/browser/BrowserWindow.java index 5272059..2633201 100644 --- a/src/main/java/com/axis/innovators/box/browser/BrowserWindow.java +++ b/src/main/java/com/axis/innovators/box/browser/BrowserWindow.java @@ -223,7 +223,6 @@ public class BrowserWindow extends JFrame { } } - private Component initializeCef(Builder builder) throws MalformedURLException { if (!isInitialized) { isInitialized = true; @@ -471,9 +470,6 @@ public class BrowserWindow extends JFrame { browser = client.createBrowser(htmlUrl, false, false); } - String fontInfo = getSystemFontsInfo(); - injectFontInfoToPage(browser, fontInfo); - Component browserComponent = browser.getUIComponent(); if (builder.browserCreationCallback != null) { boolean handled = builder.browserCreationCallback.onLayoutCustomization( @@ -508,6 +504,7 @@ public class BrowserWindow extends JFrame { config.jsQueryFunction = "javaQuery";// 定义方法 config.jsCancelFunction = "javaQueryCancel";// 定义取消方法 + updateTheme(); // 6. 配置窗口布局(确保只添加一次) SwingUtilities.invokeLater(() -> { @@ -585,11 +582,11 @@ public class BrowserWindow extends JFrame { public void updateTheme() { // 1. 获取Java字体信息 String fontInfo = getSystemFontsInfo(); - injectFontInfoToPage(browser, fontInfo); + boolean isDarkTheme = AxisInnovatorsBox.getMain().getRegistrationTopic().isDarkMode(); + injectFontInfoToPage(browser, fontInfo, isDarkTheme); // 2. 注入主题信息 - boolean isDarkTheme = AxisInnovatorsBox.getMain().getRegistrationTopic().isDarkMode(); - injectThemeInfoToPage(browser, isDarkTheme); + //injectThemeInfoToPage(browser, isDarkTheme); //// 3. 刷新浏览器 //SwingUtilities.invokeLater(() -> { @@ -650,44 +647,31 @@ public class BrowserWindow extends JFrame { return; } - client.addLoadHandler(new CefLoadHandlerAdapter() { - @Override - public void onLoadEnd(CefBrowser browser, CefFrame frame, int httpStatusCode) { - String themeInfo = String.format( - "{\"isDarkTheme\": %s, \"timestamp\": %d}", - isDarkTheme, - System.currentTimeMillis() - ); + String themeInfo = String.format( + "{\"isDarkTheme\": %s, \"timestamp\": %d}", + isDarkTheme, + System.currentTimeMillis() + ); - String script = - "window.javaThemeInfo = " + themeInfo + ";\n" + - "console.log('Java theme information has been loaded:', window.javaThemeInfo);\n" + - "\n" + - "if (typeof applyJavaTheme === 'function') {\n" + - " applyJavaTheme(window.javaThemeInfo);\n" + - "}\n" + - "\n" + - "var event = new CustomEvent('javaThemeChanged', {\n" + - " detail: window.javaThemeInfo\n" + - "});\n" + - "document.dispatchEvent(event);\n" + - "console.log('The javaThemeChanged event is dispatched');"; + // 最简单的脚本 - 直接设置和分发事件 + String script = String.format( + "window.javaThemeInfo = %s;" + + "console.log('主题信息已设置:', window.javaThemeInfo);" + + "" + + "var event = new CustomEvent('javaThemeChanged', {" + + " detail: window.javaThemeInfo" + + "});" + + "document.dispatchEvent(event);" + + "console.log('javaThemeChanged事件已分发');", + themeInfo); - browser.executeJavaScript(script, browser.getURL(), 0); - - browser.executeJavaScript( - "console.log('Theme information injection is complete,window.javaThemeInfo:', typeof window.javaThemeInfo);" + - "console.log('Number of theme event listeners:', document.eventListeners ? document.eventListeners('javaThemeChanged') : '无法获取');", - browser.getURL(), 0 - ); - } - }); + browser.executeJavaScript(script, browser.getURL(), 0); } /** * 注入字体信息到页面并设置字体 */ - private void injectFontInfoToPage(CefBrowser browser, String fontInfo) { + private void injectFontInfoToPage(CefBrowser browser, String fontInfo,boolean isDarkTheme) { if (client == null) { return; } @@ -715,6 +699,25 @@ public class BrowserWindow extends JFrame { "console.log('Number of event listeners:', document.eventListeners ? document.eventListeners('javaFontsLoaded') : '无法获取');", browser.getURL(), 0 ); + + String themeInfo = String.format( + "{\"isDarkTheme\": %s, \"timestamp\": %d}", + isDarkTheme, + System.currentTimeMillis() + ); + + script = String.format( + "window.javaThemeInfo = %s;" + + "console.log('主题信息已设置:', window.javaThemeInfo);" + + "" + + "var event = new CustomEvent('javaThemeChanged', {" + + " detail: window.javaThemeInfo" + + "});" + + "document.dispatchEvent(event);" + + "console.log('javaThemeChanged事件已分发');", + themeInfo); + + browser.executeJavaScript(script, browser.getURL(), 0); } }); @@ -732,6 +735,11 @@ public class BrowserWindow extends JFrame { @Override public void setVisible(boolean b) { + if (b) { + if (browser != null) { + updateTheme(); + } + } super.setVisible(b); } diff --git a/src/main/java/com/axis/innovators/box/browser/BrowserWindowJDialog.java b/src/main/java/com/axis/innovators/box/browser/BrowserWindowJDialog.java index ee132d8..e2bf3d4 100644 --- a/src/main/java/com/axis/innovators/box/browser/BrowserWindowJDialog.java +++ b/src/main/java/com/axis/innovators/box/browser/BrowserWindowJDialog.java @@ -513,8 +513,7 @@ public class BrowserWindowJDialog extends JDialog { } } - String fontInfo = getSystemFontsInfo(); - injectFontInfoToPage(browser, fontInfo); + updateTheme(); CefMessageRouter.CefMessageRouterConfig config = new CefMessageRouter.CefMessageRouterConfig(); config.jsQueryFunction = "javaQuery";// 定义方法 @@ -593,6 +592,8 @@ public class BrowserWindowJDialog extends JDialog { return null; } + + /** * 更新主题 */ @@ -609,6 +610,7 @@ public class BrowserWindowJDialog extends JDialog { //SwingUtilities.invokeLater(() -> { // browser.reload(); //}); + } private void injectThemeInfoToPage(CefBrowser browser, boolean isDarkTheme) { if (client == null) { @@ -744,6 +746,11 @@ public class BrowserWindowJDialog extends JDialog { @Override public void setVisible(boolean b) { + if (b) { + if (browser != null) { + updateTheme(); + } + } super.setVisible(b); }