add_action('admin_enqueue_scripts', function () {
    wp_enqueue_script('book-admin', plugins_url('admin.js', __FILE__), [], '1.0', true);
    wp_add_inline_script('book-admin', "document.querySelectorAll('.book-sync').forEach(b => b.addEventListener('click', syncRow));");
});

每行的“同步”按钮点击没有任何反应,控制台报 Refused to execute inline event handler,页面其它按钮正常。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,按钮的 onclick 写在内联属性里,后台响应头带了 script-src 限制,没有 unsafe-inline 就被拦下。事件处理器根本没有绑定成功。

这次卡住的地方就在「后台按钮无响应」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

别只看报错的最后一行,往上看几行,真正的起因通常在上面。

处理上按这个顺序:去掉 HTML 里的 onclick 属性;用 wp_add_inline_script 挂到已注册的脚本上;或单独 enqueue 一个 js 文件 用 addEventListener 绑定。

改完只确认一件事:点“同步”发出 ajax 请求,按钮变成“已同步”,控制台不再报 CSP 错误。

作者 9823189