You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Delphi开发的TMS WEB Core网站中动态加载CSS文件?

在TMS WEB Core中动态加载主题CSS的最优方案

核心思路

TMS WEB Core本质是基于WebAssembly运行的Web应用,动态加载CSS的最优方式是直接操作DOM,通过创建<link>元素插入页面<head>。结合浏览器主题偏好检测API或用户本地存储的设置,实现页面初始化时自动加载对应主题。

具体实现步骤

1. 编写主题加载函数

负责移除旧主题CSS、插入新样式链接,避免样式冲突:

procedure LoadTheme(const AThemeName: string);
var
  OldLink: TJSHTMLElement;
  NewLink: TJSHTMLElement;
begin
  // 移除已存在的主题样式链接(通过标记属性定位)
  OldLink := TJSHTMLElement(document.querySelector('link[data-theme="theme"]'));
  if Assigned(OldLink) then
    OldLink.remove;

  // 创建新的样式链接元素
  NewLink := TJSHTMLElement(document.createElement('link'));
  NewLink.setAttribute('rel', 'stylesheet');
  NewLink.setAttribute('type', 'text/css');
  NewLink.setAttribute('href', AThemeName + '.css'); // 对应light.css/dark.css文件
  NewLink.setAttribute('data-theme', 'theme'); // 标记为主题链接,方便后续管理
  document.head.appendChild(NewLink);
end;

2. 检测主题偏好并自动加载

优先读取用户本地保存的主题设置,无设置则检测系统深色/浅色偏好:

procedure DetectAndLoadTheme;
var
  SavedTheme: string;
  DarkModeQuery: TJSMediaQueryList;
begin
  // 优先使用用户本地存储的主题设置
  SavedTheme := localStorage.getItem('selected-theme');
  if SavedTheme <> '' then
  begin
    LoadTheme(SavedTheme);
    Exit;
  end;

  // 检测系统默认的主题偏好
  DarkModeQuery := window.matchMedia('(prefers-color-scheme: dark)');
  LoadTheme(IfThen(DarkModeQuery.matches, 'dark', 'light'));
end;

3. 初始化时触发加载

在窗体OnCreate事件中调用检测函数,实现页面打开自动加载主题:

procedure TMainForm.WebFormCreate(Sender: TObject);
begin
  DetectAndLoadTheme;
end;

可选:添加主题切换功能

允许用户手动切换主题并保存设置到本地存储:

procedure TMainForm.btnToggleThemeClick(Sender: TObject);
var
  CurrentTheme, NewTheme: string;
begin
  CurrentTheme := localStorage.getItem('selected-theme');
  NewTheme := IfThen(CurrentTheme = 'dark', 'light', 'dark');
  
  LoadTheme(NewTheme);
  localStorage.setItem('selected-theme', NewTheme);
end;

注意事项

  • 确保主题CSS文件(如light.css、dark.css)放在项目wwwroot目录下,TMS WEB Core会自动打包到输出目录。
  • 用data-theme属性标记主题链接,可精准定位并移除旧样式,避免多主题样式叠加冲突。
  • window.matchMedia API兼容所有现代浏览器,无需担心兼容性问题。

内容的提问来源于stack exchange,提问作者Shaun Roselt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:56:14