跳转到内容

Manifest · 清单成员

edge_side_panel 清单成员

发布于

edge_side_panel 是 Microsoft Edge 的清单成员,让已安装的 PWA 可以被固定到 Edge 侧边栏,也就是 浏览器窗口右侧那条竖向的应用栏。它唯一的属性 preferred_width 要求侧边栏以指定宽度而不是 376 像素的最小宽度打开应用。

该成员只有桌面端的 Microsoft Edge(Windows、macOS、Linux)实现。Chrome 155、Firefox 157 与 Safari 27 把它当作未知成员丢弃,不报错。Microsoft 自己的文档带有一条 2026 年 7 月的更新,说明 该特性正在被弃用、不再受支持;请把本条目当作一项正在退场的特性的记录,而不是新开发的目标。

  • 类型:对象。空对象 {} 就是完整的选择加入;唯一被识别的属性是 preferred_width, 单位为 CSS 像素的数字。
  • 默认值:缺省。没有该成员时 Edge 不提供把应用固定到侧边栏的入口;写 {} 时侧边栏以 376 px 的默认最小宽度打开应用,用户可以拉宽。
  • 示例值:{ "preferred_width": 480 }。

Microsoft 的文档要求清单先具备 name、short_name、description 与 icons,该成员才会生效, 因为侧边栏商店的列表就是从这几项生成的。低于 376 px 的 preferred_width 会被钳制到该值;用户 仍可把面板拉大,或缩小到最小宽度为止。

固定在侧边栏里的应用默认收到桌面端的 User-Agent Client Hints,即使存在移动端变体也是如此。 侧边栏通过一个 UA-CH 品牌向页面表明身份,这是官方支持的检测途径;Microsoft 把匹配 User-Agent 字符串列为备选,并建议不要使用。

清单里的选择加入和运行时检查是两件事:前者只改一行,后者决定应用渲染哪种布局。

让音乐播放器以 480 px 进入侧边栏

Section titled “让音乐播放器以 480 px 进入侧边栏”

一个双栏布局的播放器放不进 376 px,于是请求 480。用户固定该应用时,Edge 以这个宽度打开侧边栏; 清单的其余部分就是一份普通的可安装 PWA。

{
"name": "PWAmp music player",
"short_name": "PWAmp",
"description": "A skinnable music player app to play your favorite mp3 files",
"start_url": "/",
"display": "standalone",
"icons": [{ "src": "/favicon-256.png", "sizes": "256x256", "type": "image/png" }],
"edge_side_panel": { "preferred_width": 480 }
}

去掉 preferred_width 仍然保留固定入口,并把宽度交给用户决定;对于在 376 px 下已经能正常工作的 布局,这是更好的选择。

Edge 通过 User-Agent Client Hints 品牌暴露侧边栏。没有 navigator.userAgentData 的浏览器 (Firefox 157、Safari 27)走回退分支,被当作普通窗口处理。

function isInEdgeSidebar() {
if (!('userAgentData' in navigator)) return false; // 没有 UA-CH:不是 Edge 侧边栏
return navigator.userAgentData.brands.some((b) => b.brand === 'Edge Side Panel');
}
document.documentElement.dataset.layout = isInEdgeSidebar() ? 'sidebar' : 'window';

在 CSS 里按这个 data 属性切换,而不是分叉应用逻辑:侧边栏里的应用就是同一个应用在更窄、更高的 视口里运行,一条 max-width 媒体查询能覆盖该属性要做的大部分事情。

在移动优先的站点上给侧边栏提供桌面布局

Section titled “在移动优先的站点上给侧边栏提供桌面布局”

因为侧边栏发送的是桌面端客户端提示,按 Sec-CH-UA-Mobile 请求头选择移动端包的站点会把桌面版 发给一个 376 px 的面板。在服务端先检查品牌再做选择。

// Express 中间件:在 Edge 侧边栏内优先使用紧凑布局。
app.use((req, res, next) => {
const brands = String(req.get('Sec-CH-UA') ?? '');
res.locals.compact = brands.includes('"Edge Side Panel"') || req.get('Sec-CH-UA-Mobile') === '?1';
next();
});

Sec-CH-UA 是每个请求都会发送的低熵提示,这项检查不需要 Accept-CH 选择加入。

规范

规范状态
Microsoft Edge Explainers: Side Panel说明文档