用户一次性提了三件事,拆解如下。
Kratos v3.1.8
Kratos Yang
控制台那条 hm.js [Violation] Permissions policy violation: unload 来自百度统计的第三方脚本,主题代码无法干预,线上也没有 Permissions-Policy 响应头。只作说明,不单独立项。
hm.js [Violation] Permissions policy violation: unload
Permissions-Policy
关于第 1 件:改起来不麻烦(版本号在 PHP 侧已有 THEME_VERSION),所以按"换成 Kratos Yang + 版本号"做,不删除。
THEME_VERSION
本次拆成两张子单,均已完成并部署:
Kratos Yang v4.2.0
readme.html
同一段粘贴里还有一条:
hm.js?192a62f2ae923a591128f92554cc80e0:2 [Violation] Permissions policy violation: unload is not allowed in this document.
查证结论:不是主题的问题,本次不改,也不建单。
三步确认:
curl -I https://yangyq.net/
Permissions-Policy|feature-policy|unload
hm.js
hm.baidu.com
unload
Chrome 正在按计划收掉 unload 事件,对第三方脚本上的 unload 监听会报这条 Violation。主题既没有能力也没有必要去改别人的脚本。
4.2.0
kratos_yang-4.2.0.zip
044493c31e7ea14850de7adbb6520e51
theme-update/
update.json
INSTALLED=4.1.1 / NEW=4.2.0 / HAS_UPDATE=YES
c058ecc
#35
_console421_check.py
_console421_falsify.py
_console421_meta_falsify.py
_readme421_check.py
_readme421_falsify.py
_readme421_meta_falsify.py
php -l
_mkzip420.py
_live_console_check.js
theme/style.css Version: 4.2.0 theme 文件数 239(与包内一致,无丢失) assets/js/kratos.min.js Kratos Yang(旧串 Kratos v3 已清零) inc/theme-core.php:103 'version' => THEME_VERSION PUC INSTALLED=4.2.0 / getUpdate()=null(不再提示更新) transient update_themes 空 theme-update/ ACL user:theme:rwx + default:user:theme:rwx(升级后**未失效**) 主题目录属主 www:www(升级后自动归还,符合预期)
kratos.min.js?ver=4.2.0:1 Kratos Yang v4.2.0 https://code.yangyq.net/laoyang/wordpress-kratos-yang
✅ 用户报的 Kratos v3.1.8 已消失,改为 Kratos Yang v4.2.0。 ✅ 版本号来自 style.css 单一真源,注入链路 style.css → THEME_VERSION → wp_localize_script → window.kratos.version → console.log 全通。
style.css
style.css → THEME_VERSION → wp_localize_script → window.kratos.version → console.log
HTTP 200 / 18548 字节 逐版标题 <b>V[0-9] 0 个 更新机制词(update.json/md5/PUC) 0 个 章节数(一、二、…) 17 节 Markdown 星号残留 0 个 script/link/iframe/img 标签 0 个
(index):1 Uncaught (in promise) InvalidStateError: Transition was aborted because of invalid state. ViewTransition opt-in disabled
结论:不改代码。
证据一:本次改动不涉及
git diff HEAD~1 只有 4 文件 28 行(kratos.js 删副本、min.js 同步一句 console.log、 theme-core.php 加 $data['version']、style.css 升版本)。零 CSS 动画、零页面过渡。
git diff HEAD~1
$data['version']
证据二:主题与插件里没有 View Transition 代码
服务器本地全量 grep(不是公网抓 —— cdn.yangyq.net 有防盗链,curl 一律 403, 拿 403 的空响应去 grep 会得出"0 命中"的假结论,这个坑我先踩了一次):
cdn.yangyq.net
grep -rl "startViewTransition" themes/kratos_yang/ plugins/ → 0 个 grep -rl "@view-transition" ... → 0 个 grep -rl "view-transition-name" ... → 1 个 assets/hljs/highlight.min.js ← highlight.js 的 CSS 属性名词表,是字符串数组不是 API 调用
证据三:报错位置在主题脚本之前
用户日志顺序是 (index):1 在前、kratos.min.js:1 在后。 (index) = 文档本身(内联脚本 / 浏览器内部),不是外部 js。 而 kratos.min.js 由 wp_footer 输出,且 theme_autoload() 整包在 if (!is_admin()) 内 —— 所以后台根本不加载主题脚本,这条错误时序上不可能由主题产生。
(index):1
kratos.min.js:1
(index)
kratos.min.js
wp_footer
theme_autoload()
if (!is_admin())
为什么会突然出现:不是升级引起的,是 Chrome 153+(用户本机 156.0.8078.48) 变了行为。 Blink 在 dom_view_transition.cc 里给这条消息加了 reason 后缀:
dom_view_transition.cc
Transition was aborted because of invalid state
... invalid state. **ViewTransition opt-in disabled**
React 官方踩了同一个坑(react#37669):他们按消息精确相等来吞这条错误, Chrome 153 加后缀后匹配失效,生产环境从 0 涨到每周约 240 次。结论相同:这是浏览器行为变更。
这条错误的语义:跨文档 View Transition 要求两页都 opt-in (@view-transition { navigation: auto })。本站两页都没 opt-in(WP 7.1.3 核心也没注入), 所以只要有任何脚本在导航时尝试 transition 并挂了 .ready handler,就会打出这行。 它不影响功能、渲染、SEO。
@view-transition { navigation: auto }
.ready
复现尝试:四个场景全部无异常(用户真实 Chrome 156 做对照)
为什么不"顺手修掉":在主题里加 @view-transition { navigation: auto } 等于主动开启跨文档过渡动画 —— 这是功能变更不是修 bug,而且本站是固定侧栏 + 主内容区结构, 页面过渡极易出现元素跳动,风险大于收益。要真正消掉它得删掉"正在尝试 transition"的那行代码, 而那行不在我们仓库里。
同一条粘贴里的 hm.js 警告(百度统计 unload)同理,见上一条评论。
两张子单均已交付、上线、用户实测通过:
用户升级后控制台实测:
getUpdate()=null
user:theme:rwx
(index):1 InvalidStateError ... ViewTransition opt-in disabled
startViewTransition
@view-transition
第二条尤其值得记一笔:本机 Chrome 是 156.0.8078.48,Chrome 153(2026-09-08 stable)起 Blink 给这条消息加了 reason 后缀,导致所有按精确字符串相等来吞这条错误的框架/脚本 (React 官方 react#37669 就是)突然吞不住了。不是升级引起的,是浏览器改了措辞。
四个场景(首页+滚动+prefetch、站内导航 4 次、跨站进入、强制 opt-in 对照)用真实 Chrome 156 全部无法复现,进一步说明它取决于用户在特定时刻的导航状态,而非页面内容。
关闭主单。
No dependencies set.
The note is not visible to the blocked user.
用户一次性提了三件事,拆解如下。
拆成两件独立可验收的事
Kratos v3.1.8硬编码,要改成Kratos Yang+ 当前版本号。可单独验收(看控制台输出)。第三件不建单
控制台那条
hm.js [Violation] Permissions policy violation: unload来自百度统计的第三方脚本,主题代码无法干预,线上也没有Permissions-Policy响应头。只作说明,不单独立项。用户原话要点
关于第 1 件:改起来不麻烦(版本号在 PHP 侧已有
THEME_VERSION),所以按"换成 Kratos Yang + 版本号"做,不删除。4.2.0 交付汇总
本次拆成两张子单,均已完成并部署:
Kratos v3.1.8→Kratos Yang v4.2.0readme.html整体重写(57 节版本日志 → 17 节功能与用法)关于第三条「hm.js 的 Permissions policy violation」
同一段粘贴里还有一条:
查证结论:不是主题的问题,本次不改,也不建单。
三步确认:
curl -I https://yangyq.net/—— 响应里没有Permissions-Policy响应头,所以不是我们发的策略。Permissions-Policy|feature-policy|unload—— 只有 jQuery 内部的字符串命中。hm.js是百度统计的脚本(hm.baidu.com),它自己注册了unload事件监听。Chrome 正在按计划收掉
unload事件,对第三方脚本上的unload监听会报这条 Violation。主题既没有能力也没有必要去改别人的脚本。发布信息
4.2.0kratos_yang-4.2.0.zip,4.64 MB,md5044493c31e7ea14850de7adbb6520e51theme-update/(不是主题目录下)update.json已指向 4.2.0,PUC 实测INSTALLED=4.1.1 / NEW=4.2.0 / HAS_UPDATE=YESc058ecc(带#35),已推送 main判据总览
_console421_check.py_console421_falsify.py_console421_meta_falsify.py_readme421_check.py_readme421_falsify.py_readme421_meta_falsify.pyphp -l全量_mkzip420.py_live_console_check.js4.2.0 升级后验收(用户已在后台点升级)
线上终态
用户控制台实测(#35 的最终验收)
✅ 用户报的
Kratos v3.1.8已消失,改为Kratos Yang v4.2.0。✅ 版本号来自
style.css单一真源,注入链路style.css → THEME_VERSION → wp_localize_script → window.kratos.version → console.log全通。readme 线上验收(#36)
关于新出现的那条 ViewTransition 报错 —— 已彻查,不是主题问题
结论:不改代码。
证据一:本次改动不涉及
git diff HEAD~1只有 4 文件 28 行(kratos.js 删副本、min.js 同步一句 console.log、theme-core.php 加
$data['version']、style.css 升版本)。零 CSS 动画、零页面过渡。证据二:主题与插件里没有 View Transition 代码
服务器本地全量 grep(不是公网抓 ——
cdn.yangyq.net有防盗链,curl 一律 403,拿 403 的空响应去 grep 会得出"0 命中"的假结论,这个坑我先踩了一次):
证据三:报错位置在主题脚本之前
用户日志顺序是
(index):1在前、kratos.min.js:1在后。(index)= 文档本身(内联脚本 / 浏览器内部),不是外部 js。而
kratos.min.js由wp_footer输出,且theme_autoload()整包在if (!is_admin())内—— 所以后台根本不加载主题脚本,这条错误时序上不可能由主题产生。
为什么会突然出现:不是升级引起的,是 Chrome 153+(用户本机 156.0.8078.48) 变了行为。
Blink 在
dom_view_transition.cc里给这条消息加了 reason 后缀:Transition was aborted because of invalid state... invalid state. **ViewTransition opt-in disabled**React 官方踩了同一个坑(react#37669):他们按消息精确相等来吞这条错误,
Chrome 153 加后缀后匹配失效,生产环境从 0 涨到每周约 240 次。结论相同:这是浏览器行为变更。
这条错误的语义:跨文档 View Transition 要求两页都 opt-in
(
@view-transition { navigation: auto })。本站两页都没 opt-in(WP 7.1.3 核心也没注入),所以只要有任何脚本在导航时尝试 transition 并挂了
.readyhandler,就会打出这行。它不影响功能、渲染、SEO。
复现尝试:四个场景全部无异常(用户真实 Chrome 156 做对照)
为什么不"顺手修掉":在主题里加
@view-transition { navigation: auto }等于主动开启跨文档过渡动画 —— 这是功能变更不是修 bug,而且本站是固定侧栏 + 主内容区结构,
页面过渡极易出现元素跳动,风险大于收益。要真正消掉它得删掉"正在尝试 transition"的那行代码,
而那行不在我们仓库里。
同一条粘贴里的 hm.js 警告(百度统计 unload)同理,见上一条评论。
主单收尾
两张子单均已交付、上线、用户实测通过:
Kratos v3.1.8→Kratos Yang v4.2.0readme.html57 节版本日志 → 17 节功能与用法用户升级后控制台实测:
交付物
4.2.0,包kratos_yang-4.2.0.zip(4.64MB,md5044493c31e7ea14850de7adbb6520e51)c058ecc,已推 mainupdate.json指向 4.2.0;升级后 PUCgetUpdate()=null,不再提示更新theme-update/ACL 升级后未失效(user:theme:rwx+ default ACL 都在),无需重设两条控制台噪音的归属(都不改)
hm.js [Violation] Permissions policy violation: unloadPermissions-Policy响应头(index):1 InvalidStateError ... ViewTransition opt-in disabledstartViewTransition与@view-transition均为 0 处第二条尤其值得记一笔:本机 Chrome 是 156.0.8078.48,Chrome 153(2026-09-08 stable)起
Blink 给这条消息加了 reason 后缀,导致所有按精确字符串相等来吞这条错误的框架/脚本
(React 官方 react#37669 就是)突然吞不住了。不是升级引起的,是浏览器改了措辞。
四个场景(首页+滚动+prefetch、站内导航 4 次、跨站进入、强制 opt-in 对照)用真实 Chrome 156
全部无法复现,进一步说明它取决于用户在特定时刻的导航状态,而非页面内容。
关闭主单。