diff --git a/themes/Ying/layouts/partials/artalk.html b/themes/Ying/layouts/partials/artalk.html index e0d20866..27d9c72e 100644 --- a/themes/Ying/layouts/partials/artalk.html +++ b/themes/Ying/layouts/partials/artalk.html @@ -256,8 +256,14 @@ {{/* pageTitle 必须显式传:Artalk 不传时会读 document.title,而 PJAX 切页 早期脚本执行时 document.title 还是上一个页面的(经典竞态),历史上 数据库里一堆文章页的标题被污染成「留言」就是这么来的。head.html 的 - 就是纯 .Title,这里与它保持一致。jsonify 防标题里有引号炸模板。 */}} - pageTitle: {{ .Title | jsonify }}, + <title> 就是纯 .Title,这里与它保持一致。 + + ★ 必须 safeJS:这段在 <script> 里,Go 模板按 JS 上下文再转义一层, + `jsonify` 的结果会被二次编码 —— 标题 留言 会变成 "\"留言\"", + 评论入库/邮件标题就带上了一对引号(《"留言"》)。safeJS 明确告诉 + 模板「这就是最终 JS 字面量」,不再二次转义;`</` 仍按惯例转义兜底。 */}} + {{ $t := .Title | jsonify }} + pageTitle: {{ replace $t "</" "<\\/" | safeJS }}, emoticons: '{{ .Site.Params.artalk.emoticons | absURL }}', aiComment: null };