链接与图片
库默认不映射站点路由,也不加载图片。链接与媒体地址由宿主决定;库只做校验、清洗与渲染。
链接
默认行为
外链只允许 http:、https:、mailto:;无法安全解析的地址降级为被拦截的可读文本。绝对 HTTP(S) / mailto 外链默认带 target="_blank" 与 rel="nofollow noopener noreferrer"。
resolveLink
返回值语义:
request 提供 kind、target,内部链接还可能有 page 与 fragment。context 提供原始解析快照 document、当前工作树 ast 与当前节点 node。
Note
解析函数只返回普通数据,不返回 React 元素。需要完全自定义链接外观与交互时,使用 semanticComponents.link。
下面的示例为内部链接提供站内地址,外链沿用默认处理:
外部链接策略
policy.allowRelativeLinks默认为true,允许解析函数返回相对地址。policy.externalLinkTarget默认"_blank";设为null时外链不写target。- 相对链接在
_blank下会加上noopener noreferrer;最终整理会删除非法的 target 与未知的rel值。
图片
默认行为
文件节点默认渲染为带说明的占位。没有 resolveImage 时不会生成 <img>,库也不会请求任何图片地址。
resolveImage
- 返回
null保持占位;返回对象才授权图片资源。 src只允许http:/https:;需要相对图片时显式设置policy.allowRelativeImages: true。request提供name、parameters、解析出的width/height、alt与caption。- 宽高最终限制在 1–4096;解析函数返回的值优先。
- 生成的
<img>固定带loading="lazy"与decoding="async",alt缺省使用文件名。
文件说明与链接
- 说明优先取显式
caption=,否则取未命名说明;说明中的链接、模板占位会递归渲染。 - 文件参数
link=经sanitizeHref后生成链接;class=作为附加类名。 - 行内文件使用
<span>,块级文件使用<figure>;外层保留mw-default-size、mw-halign-*等兼容类名。
授权与安全
准备阶段会记录解析函数实际返回并通过校验的图片地址。最终整理时:
- 未授权的
<img>会被删除;有alt时保留文本,并产生UNAUTHORIZED_IMAGE诊断。resolver 产物使用authorizedImages,源码 HTML 使用policy.allowSourceImages,插件产物使用policy.allowPluginImages。 - 插件不能通过插入任意
<img>绕过默认不出图策略。 - URL 在写入属性前会先进行实体解码、去除控制字符,再按协议白名单校验。
需要预先处理 URL 时,可以使用 /hast 导出的 sanitizeHref、sanitizeImageUrl 与 sanitizedAttributesToProps。库在最终阶段仍会再次校验。
策略与组件
如果只需要调整默认策略,不需要接入解析函数:
policy 与默认值做单层浅合并;extraTags、stripTags 是整体替换,不会追加。需要保留默认数组时以 DEFAULT_PREPARE_POLICY 为基准展开。
链接与文件的最终外观可以通过 HTML 组件或语义组件 自定义。自定义组件属于可信代码,输出不再经过库清洗。