fix(theme): pageTitle 加 safeJS —— 修 Go 模板 JS 上下文二次转义导致标题天生带引号
在 <script> 里 {{ .Title | jsonify }} 会被 Go 模板按 JS 上下文再转义一层:
标题「留言」渲染成 pageTitle: "\"留言\"",前端每次上报 page_title 都自带
一对引号 —— 评论入库、邮件标题因此出现《"留言"》,历史上 pages 表一堆标题带
引号(17 行)也是这个根因。jsonify 后用 safeJS 标明这就是最终 JS 字面量,
`</` 仍按惯例转义兜底;已验证中文/emoji 标题字面量均合法
This commit is contained in:
1 parent
f7e0596218
commit
3d7d7bd396
1 file changed
+8
-2
@@ -256,8 +256,14 @@
|
|||||||
{{/* pageTitle 必须显式传:Artalk 不传时会读 document.title,而 PJAX 切页
|
{{/* pageTitle 必须显式传:Artalk 不传时会读 document.title,而 PJAX 切页
|
||||||
早期脚本执行时 document.title 还是上一个页面的(经典竞态),历史上
|
早期脚本执行时 document.title 还是上一个页面的(经典竞态),历史上
|
||||||
数据库里一堆文章页的标题被污染成「留言」就是这么来的。head.html 的
|
数据库里一堆文章页的标题被污染成「留言」就是这么来的。head.html 的
|
||||||
<title> 就是纯 .Title,这里与它保持一致。jsonify 防标题里有引号炸模板。 */}}
|
<title> 就是纯 .Title,这里与它保持一致。
|
||||||
pageTitle: {{ .Title | jsonify }},
|
|
||||||
|
★ 必须 safeJS:这段在 <script> 里,Go 模板按 JS 上下文再转义一层,
|
||||||
|
`jsonify` 的结果会被二次编码 —— 标题 留言 会变成 "\"留言\"",
|
||||||
|
评论入库/邮件标题就带上了一对引号(《"留言"》)。safeJS 明确告诉
|
||||||
|
模板「这就是最终 JS 字面量」,不再二次转义;`</` 仍按惯例转义兜底。 */}}
|
||||||
|
{{ $t := .Title | jsonify }}
|
||||||
|
pageTitle: {{ replace $t "</" "<\\/" | safeJS }},
|
||||||
emoticons: '{{ .Site.Params.artalk.emoticons | absURL }}',
|
emoticons: '{{ .Site.Params.artalk.emoticons | absURL }}',
|
||||||
aiComment: null
|
aiComment: null
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in new issue
Block a user