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

如何切换SweetAlert2模态框主题?现有代码致页面加载停滞求修复

问题分析与解决方案

你的代码导致页面停止加载的核心原因:每次打开弹窗时,只要处于暗黑模式就会重复向页面头部添加dark.css样式表,重复加载同一资源会触发浏览器资源请求阻塞、样式优先级冲突,最终引发页面卡顿或停止响应。

正确实现方案

1. 提前加载暗黑主题样式(推荐)

先在页面初始化时一次性引入暗黑主题样式,避免动态重复加载:

<!-- 在页面<head>中添加,仅需引入一次 -->
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/@sweetalert2/theme-dark@4/dark.css">

2. 优化SweetAlert2代码

利用SweetAlert2内置的theme属性直接切换主题,同时绑定开关的实时切换事件:

Swal.fire({
  title: 'Settings',
  icon: 'question',
  iconHtml: '<i class="fa fa-cog settings-modal-icon"></i>',
  html: settingsMenuHtml,
  showCloseButton: true,
  showCancelButton: true,
  confirmButtonText: 'Save',
  // 根据当前暗黑模式状态设置初始主题
  theme: Nightly.isDark ? 'dark' : 'light',
  onOpen: () => {
    const darkToggle = document.querySelectorAll('input[type="checkbox"]')[0];
    darkToggle.checked = Nightly.isDark;

    // 绑定开关切换事件,实时更新弹窗主题
    darkToggle.addEventListener('change', (e) => {
      Nightly.isDark = e.target.checked;
      Swal.update({
        theme: Nightly.isDark ? 'dark' : 'light'
      });
    });
  }
})

3. 备选方案:动态加载但避免重复添加

如果必须动态加载样式,需先判断样式表是否已存在,防止重复加载:

Swal.fire({
  // 其他配置项不变
  onBeforeOpen: () => {
    const darkStyleExists = document.querySelector('link[href*="theme-dark"]');
    if (Nightly.isDark && !darkStyleExists) {
      const ss = document.createElement('link');
      ss.rel = "stylesheet";
      ss.href="//cdn.jsdelivr.net/npm/@sweetalert2/theme-dark@4/dark.css";
      document.head.appendChild(ss);
      Swal.update({ theme: 'dark' });
    } else {
      Swal.update({ theme: Nightly.isDark ? 'dark' : 'light' });
    }
  },
  onOpen: () => {
    // 开关初始化与事件绑定同上述方案
    const darkToggle = document.querySelectorAll('input[type="checkbox"]')[0];
    darkToggle.checked = Nightly.isDark;
    darkToggle.addEventListener('change', (e) => {
      Nightly.isDark = e.target.checked;
      Swal.update({
        theme: Nightly.isDark ? 'dark' : 'light'
      });
    });
  }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:45:17