/** 浏览器内事件录制 — 纯 JS,避免 tsx evaluate 注入 __name */ (function installP1HumanRecorder() { if (window.__p1RecorderInstalled) return; window.__p1RecorderInstalled = true; window.__p1HumanEvents = window.__p1HumanEvents || []; function pickLabel(el) { if (!el || !el.tagName) return ""; if (el.tagName === "LABEL") { return (el.textContent || "").replace(/\s+/g, " ").trim(); } if (el.id) { var lbl = document.querySelector('label[for="' + el.id + '"]'); if (lbl) return (lbl.textContent || "").replace(/\s+/g, " ").trim(); } if (el.labels && el.labels[0]) { return (el.labels[0].textContent || "").replace(/\s+/g, " ").trim(); } return ""; } function resolveInteractive(el) { var cur = el; for (var depth = 0; depth < 10 && cur; depth += 1) { if (!cur.tagName) break; var tag = cur.tagName.toUpperCase(); if (tag === "INPUT" && (cur.type === "checkbox" || cur.type === "radio")) return cur; if (tag === "LABEL") return cur; if (tag === "BUTTON") return cur; if (cur.getAttribute && cur.getAttribute("role") === "checkbox") return cur; cur = cur.parentElement; } return el; } function pushEvent(kind, el) { el = resolveInteractive(el); if (!el || !el.tagName) return; var value = ""; if (el.tagName === "SELECT" && el.options && el.selectedIndex >= 0) { value = (el.options[el.selectedIndex].text || "").trim(); } else { value = String(el.value || "").slice(0, 200); } window.__p1HumanEvents.push({ ts: Date.now(), kind: kind, url: location.href, tag: el.tagName.toLowerCase(), id: el.id || "", name: el.getAttribute("name") || "", inputType: el.type || "", value: value, label: pickLabel(el), text: (el.textContent || "").replace(/\s+/g, " ").trim().slice(0, 120), selector: el.id ? "#" + el.id : "", }); } function bindRoot(root) { if (!root || root.__p1RecorderBound) return; root.__p1RecorderBound = true; root.addEventListener( "click", function (e) { pushEvent("click", e.target); }, true, ); root.addEventListener( "change", function (e) { pushEvent("change", e.target); }, true, ); root.addEventListener( "input", function (e) { if (e.target && e.target.type === "checkbox") return; pushEvent("input", e.target); }, true, ); } function bindAll() { bindRoot(document.querySelector("#container-mh")); bindRoot(document.body); } bindAll(); var obs = new MutationObserver(function () { bindAll(); }); obs.observe(document.documentElement, { childList: true, subtree: true }); })();