96SEO 2026-07-04 17:17 4
说实话,Electron 开发里Zui让人抓狂的,就是窗口状态的持久化。
你说要把窗口的大小、位置、Zui大化状态dou记下来下次打开还Neng和上次一模一样。

听起来hen简单,结果一不小心就踩坑,窗口跑到kan不见的地方,或者根本不记住用户调的大小。
先聊聊「保存在哪里」Electron 官方给了 app.getPath 这块儿专门存放配置的目录。
别傻傻把文件写到项目根目录,打包后那是只读的。
所以我们通常会在这个目录下建个 window-state.json,里面放个 JSON 对象。
结构大概长这样:
{
"x": 120,
"y": 80,
"width": 1280,
"height": 720,
"isMaximized": false
}
这玩意儿就相当于桌面版的「本地存储」,随时读写毫无压力。
怎么把状态写进去?关键在于监听窗口的几个事件:resizemoveclose。
我常用下面这段代码:
let lastNormalBounds = null;
win.on => {
if ) {
lastNormalBounds = win.getBounds;
}
});
win.on => {
if ) {
lastNormalBounds = win.getBounds;
}
});
win.on => {
// 保存之前先判断用户到底是点叉叉还是点托盘菜单里的 Quit
saveWindowState;
});
注意啊,这里我们只在非Zui大化状态下记录尺寸,否则拿到的是全屏尺寸,恢复时会出问题。
saveWindowState 的实现细节function saveWindowState {
const isMax = win.isMaximized;
const bounds = isMax ? ) : win.getBounds;
const state = {
x: bounds.x,
y: bounds.y,
width: bounds.width,
height: bounds.height,
isMaximized: isMax
};
const fs = require;
const path = require;
const filePath = path.join, 'window-state.json');
try {
fs.writeFileSync);
console.log;
} catch {
console.error;
}
}
启动时怎么读取并恢复?
先读文件,Ru果文件不存在或解析出错,就回退到默认值。
function loadWindowState {
const fs = require;
const path = require;
const filePath = path.join, 'window-state.json');
try {
const raw = fs.readFileSync;
return JSON.parse;
} catch {
// 默认宽高,位置交给系统决定
return { width: 1024, height: 768 };
}
}
然后在创建 MainWindow 时把这些属性塞进去:
const state = loadWindowState;
const win = new BrowserWindow({
width: state.width,
height: state.height,
x: state.x,
y: state.y,
show: false // 等 ready-to-show 再显示,避免白屏
});
if {
win.maximize;
}
win.once => win.show);
多显示器兼容小技巧
有时候用户上一次把窗口拖到了第二块屏幕,第二天只开了一块显示器。
这时候直接用保存的坐标会导致窗口跑到「不存在」的区域,kan不到。
Aha!我们Ke以在恢复前检查坐标是否落在当前任何一个显示器范围内:
function isVisibleOnAnyDisplay {
const { screen } = require;
return screen.getAllDisplays.some(d => {
const b = d.bounds;
return x>= b.x && x = b.y && y
托盘隐藏 vs 真正退出——别混淆了!
hen多 Electron 应用点关闭按钮其实是「隐藏」到托盘。
于是我们得在 'close' 上拦截:
let isQuitting = false;
win.on => {
if {
e.preventDefault; // 阻止默认关闭
win.hide; // 隐藏到托盘
}
});
app.on => { isQuitting = true; });
Crap,我刚才写反了不对不对。应该是先把 isQuitting=true 再调用 .quit, 否则会一直拦住自己退出。
# 为什么百度不收录?
- 你的站点Ru果没有Zuo好 SEO 基础,比如缺少 ``、`robots.txt` 配置错误,那百度爬虫根本进不来。
- 再者,Ru果页面加载全靠 JavaScript,而你又没有提供预渲染或 SSR,那么爬虫只Nengkan到空白页,自然不会收录啦。
- Zui后一定要检查下有没有被误判为 “软404” 或者返回了错误码,这些dou会导致收录失败。
Easier Way:直接搬 electron‑store 来搞定!If you don't want to手写读写文件,那就套个现成库吧。Zui火的是 electron‑store,它内部封装了 JSON 文件读写,还支持加密、自动迁移等高级特性。
const Store = require;
const store = new Store;
function saveWithStore {
const bounds = win.isMaximized
? )
: win.getBounds;
store.set({
x: bounds.x,
y: bounds.y,
width: bounds.width,
height: bounds.height,
isMaximized: win.isMaximized
});
}
function loadFromStore {
return store.store; // 自动返回对象,Ru果不存在会返回 {}
}
Bingo!省事儿省事儿,一行代码搞定持久化,还Neng随时在渲染进程里通过 IPC 调用查询当前配置。哈哈,这种「偷懒」其实也是高手技巧之一呀~你懂的。
常见坑 & 小贴士
• 别忘了在 Windows 上处理 DPI 缩放,否则保存的坐标在高分屏上会偏移。
• macOS 的全屏模式跟Zui大化不同,需要额外检测 `win.isFullScreen` 并单独保存状态。
• Ru果你的应用里还有多个子窗口,每个dou需要独立保存,否则会互相覆盖。Ke以给每个窗口加前缀键名,例如 `main-${key}`、`settings-${key}`。
• 测试时多改几次尺寸、拖到副屏,然后重启确认恢复效果。别光kan代码,要真的跑起来感受一下才行!
• Zui好在 `app.on` 前手动调用一次 `saveWindowState`,防止因为异常退出导致数据丢失。
一句话:坚持「读‑写‑校验」三部曲,你的 Electron 窗口永远不会迷路! 😂# 小结 1️⃣ 用 `app.getPath` 放 JSON 2️⃣ 在 `resize|move|close` 时记录Zui新边界 3️⃣ 启动时读取并校验显示器可见性 4️⃣ 必要时套 electron‑store 简化操作 5️⃣ 别忘了区分「关闭=隐藏」和「退出=真正 quit」
P.S. 哈哈,其实实现起来没那么复杂,只要把这些碎片拼起来你就拥有了一个「记忆力超强」的桌面应用。咱就是说这种细节往往决定用户是否愿意天天打开你的软件。祝你玩得开心~ 🙌
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback