From d35f0b6730e090f83fdd1bdf648ceaa92b03778f Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 22 Aug 2026 13:46:06 +0800 Subject: [PATCH] =?UTF-8?q?fix(frontend):=20=E8=A7=A3=E7=BB=91=20vendor=20?= =?UTF-8?q?main.min.js=20=E7=9A=84=20body=20=E7=BA=A7=20ajax=20=E5=A7=94?= =?UTF-8?q?=E6=89=98=EF=BC=8C=E6=A0=B9=E9=99=A4=20admin-ajax=20400=20"0"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit main.min.js 在 body 上委托 [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请求错误」的来源;评论点赞(data-action=comment_like)、文章 点赞/收藏(data-action=like|favorite)、VIP 购买等均会触发,且与 §10.11 自有 处理重复。main.min.js 由 loader.js 异步加载,解绑以幂等 .off 每 200ms 重试至多 50 次覆盖加载窗口。vendor 运行时仅保留 UI 行为。 --- assets/js/aksrt-runtime.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/assets/js/aksrt-runtime.js b/assets/js/aksrt-runtime.js index c60a1f6f..4cf2ba7d 100644 --- a/assets/js/aksrt-runtime.js +++ b/assets/js/aksrt-runtime.js @@ -269,6 +269,34 @@ }); }, true); + // ══════════════════════════════════════════════════════════════ + // §10.10a — 解绑 vendor main.min.js 的 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 需在其绑定后执行——幂等重试覆盖加载窗口。 + function unbindVendorAjaxDelegates() { + if (!window.jQuery) return; + try { + var $body = jQuery('body'); + $body.off('click', '[data-action]'); + $body.off('click', '[ajax-action]'); + $body.off('click', '.wp-ajax-submit,[zibajax="submit"]'); + $body.off('click', '.initiate-checkin'); + $body.off('click', '.oauth-untying'); + } catch (e) { /* vendor 运行时未就绪时忽略 */ } + } + var unbindVendorAjaxLoop = function () { + unbindVendorAjaxDelegates(); + if (++unbindVendorAjaxLoop.tries >= 50) return; // ~10s @200ms 覆盖异步加载窗口 + setTimeout(unbindVendorAjaxLoop, 200); + }; + unbindVendorAjaxLoop.tries = 0; + unbindVendorAjaxLoop(); + // ══════════════════════════════════════════════════════════════ // §10.11 — [data-action] / [ajax-action] universal buttons // ══════════════════════════════════════════════════════════════