fix(comments): 拦截 vendor comment.min.js 懒加载并解绑其 7 条委托

栈追踪确认 400 "0" 的调用方是 zibll comment.min.js(main.min.js 检测到
#commentform/#postcomments 后 tbquire(["comment"]) 自动懒加载),其
#commentform #submit 绑定 zib_ajax(action=submit_comment) 无处理器,
回复/排序/分页/删除等绑定也与 AKSRT 自有评论脚本双路触发。

双层处理:
1) tbfine 预注册空 'comment' AMD 模块,tbquire 不再下载 comment.min.js
2) 若模块抢在注册前加载,对 comment.js 的 7 条 body 委托做幂等 .off
   ([fixed-input] / pagenav+orderby / reply+edit / #comment keydown /
    trash / approve / #submit)
This commit is contained in:
2026-08-22 13:49:17 +08:00
parent d35f0b6730
commit 608a1148c9
+32 -7
View File
@@ -270,15 +270,32 @@
}, true);
// ══════════════════════════════════════════════════════════════
// §10.10a — 解绑 vendor main.min.js 的 ajax 委托
// §10.10a — 拦截 vendor 评论脚本 & 解绑 vendor ajax 委托
// ══════════════════════════════════════════════════════════════
// main.min.js(loader.js 异步加载)在 body 上挂了 zib_ajax 系点击委托:
// [data-action] / [ajax-action] / .wp-ajax-submit / .initiate-checkin / .oauth-untying
// 它们向 admin-ajax 发 zibll 的 action(comment_like、like、follow_user…),
// AKSRT 没有这些处理器 → WP 返回 400 "0"(控制台「ajax请求错误」),
// 且与下方 §10.11 自有处理重复。vendor 运行时只保留 UI 行为,ajax 委托统一摘除。
// main.min.js 异步加载,.off 需在其绑定后执行——幂等重试覆盖加载窗口。
// vendor 链路:loader.js(tbquire,改造版 RequireJS)→ main.min.js 检测到
// #commentform/#postcomments 即 tbquire(["comment"]) 懒加载 comment.min.js。
// AKSRT 自有评论脚本(comments/comment-tools/comment-fixed-input/
// comment-move-form/comment-ajax)已承担全部行为,vendor comment.min.js 的
// 7 条 body 委托会双路触发(提交 zib_ajax action=submit_comment 无处理器,
// 即控制台「ajax请求错误」400 "0" 的来源;回复/排序/分页同理)。
//
// 双层防御:
// 1) tbfine 预注册空 'comment' 模块 → tbquire 不再下载 comment.min.js;
// 2) 若模块抢在注册前加载,退化为对 7 条委托做幂等 .off。
function stubVendorCommentModule() {
if (!(window.tbfine && window.tbquire && window.tbquire.defined)) return false;
try {
if (window.tbquire.defined('comment')) return true;
window.tbfine('comment', [], function () { return {}; });
return true;
} catch (e) {
return false;
}
}
// main.min.js 的 body 级 zib_ajax 委托同理摘除(vendor 只保留 UI 行为)。
function unbindVendorAjaxDelegates() {
stubVendorCommentModule();
if (!window.jQuery) return;
try {
var $body = jQuery('body');
@@ -287,6 +304,14 @@
$body.off('click', '.wp-ajax-submit,[zibajax="submit"]');
$body.off('click', '.initiate-checkin');
$body.off('click', '.oauth-untying');
// comment.min.js 的 7 条委托(zibll/js/comment.js 原始选择器)
$body.off('click', '[fixed-input]');
$body.off('click', '.commentlist .pagenav a,.comment-orderby');
$body.off('click', '.comment-edit-link,.comment-reply-link');
$body.off('keydown', '#comment');
$body.off('click', '.comment-trash-link');
$body.off('click', '.comment-approve-link');
$body.off('click', '#commentform #submit');
} catch (e) { /* vendor 运行时未就绪时忽略 */ }
}
var unbindVendorAjaxLoop = function () {