From 608a1148c9be372baf9b1e1ef3573f4f3bc67f93 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 22 Aug 2026 13:49:17 +0800 Subject: [PATCH] =?UTF-8?q?fix(comments):=20=E6=8B=A6=E6=88=AA=20vendor=20?= =?UTF-8?q?comment.min.js=20=E6=87=92=E5=8A=A0=E8=BD=BD=E5=B9=B6=E8=A7=A3?= =?UTF-8?q?=E7=BB=91=E5=85=B6=207=20=E6=9D=A1=E5=A7=94=E6=89=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 栈追踪确认 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) --- assets/js/aksrt-runtime.js | 39 +++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/assets/js/aksrt-runtime.js b/assets/js/aksrt-runtime.js index 4cf2ba7d..1e85fb60 100644 --- a/assets/js/aksrt-runtime.js +++ b/assets/js/aksrt-runtime.js @@ -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 () {