内链预览 新
约 884 字
概述
阅读文档时,正文里的 详见 [配置说明](../config/theme.md) 往往需要点进去才知道值不值得看。 内链预览会在鼠标停留在站内链接上时,展示目标页面的标题、摘要、标签与更新时间, 让读者在 不离开当前页面 的情况下判断是否跳转。
内链预览 默认关闭
快速开始
开启功能
在主题配置中开启,
true表示使用全部默认值:.vuepress/config.tsimport { defineUserConfig } from 'vuepress' import { plumeTheme } from 'vuepress-theme-plume' export default defineUserConfig({ theme: plumeTheme({ linkPreview: true, }), })按需调整
传入对象可以覆盖任意默认值。文档站通常建议同时展示目标页的标题结构:
.vuepress/config.tsexport default defineUserConfig({ theme: plumeTheme({ linkPreview: { showHeadings: true, excerptLength: 120, maxWidth: 360, }, }), })运行并查看
只对某个语言开启
配置按语言环境生效,语言级配置优先于主题级:
export default defineUserConfig({
theme: plumeTheme({
linkPreview: true,
locales: {
'/en/': { linkPreview: false },
},
}),
})卡片内容
| 内容 | 来源 | 说明 |
|---|---|---|
| 标题 | 目标页渲染后的标题 | 始终与目标页 标题 一致 |
| 摘要 | frontmatter.description → 正文首个段落 | 纯文本,不含 Markdown 语法、HTML 标签、代码块 |
| 标题结构 | 目标页的 ## 及以下标题 | 仅在 showHeadings: true 时展示 |
| 标签 | 目标页 frontmatter.tags | 最多 4 个 |
| 更新时间 | git 插件的 updatedTime | 无 git 数据时自动省略 |
关闭预览
按粒度从大到小:
| 粒度 | 写法 |
|---|---|
| 全站 | linkPreview: false(默认) |
| 某语言 | locales: { '/en/': { linkPreview: false } } |
| 某页面 | frontmatter linkPreview: false |
| 某目标页永不出现 | linkPreview: { exclude: ['/changelog/**'] } |
| 某链接 | <a href="/x/" data-no-link-preview> 或 <a href="/x/" class="no-link-preview"> |
单条链接的关闭标记同时支持 Markdown 链接与裸 HTML 锚点:
[不展示预览](/guide/features/link-preview/){.no-link-preview}覆盖范围
预览依赖构建期的内链数据,以下写法不会触发预览:
- 裸 HTML 相对锚点,例如
<a href="../x.md">:浏览器会按当前页面 URL 解析, 若指向的不是真实路由,则不会有预览; - Vue 组件内部生成的链接,例如
<VPLinkCard>、<VPLink>; - 外链:预览只针对站内链接。
安全性
- 加密页面 与 草稿页面 不会出现在预览数据中;
- 预览数据只包含公开页面的元数据,不改变任何既有产物;
- 关闭功能时,构建期不产生任何字段,客户端不绑定任何监听、不渲染任何 DOM。
常见问题
- 该链接指向的页面不存在(改名、拼写错误、
permalink变更后的旧链接); - 目标页是加密页面或草稿;
- 目标页命中了
exclude; - 链接不是 Markdown 内链(见 覆盖范围);
- 当前页配置了
linkPreview: false,或功能整体未开启。
预览数据属于源页的页面数据。修改目标页后,源页的数据已重新计算, 但源页的页面模块需要重新渲染才会更新 —— 刷新页面即可。
悬停 → 移动鼠标 → 卡片消失,会让「可点击的卡片」变成新的可用性问题; 卡片内出现第二个可点击目标也会污染 Tab 序列。卡片只做信息补充, 它展示的正是当前链接本身。
