support angular click event (#3960)

This commit is contained in:
LawyZheng
2025-11-11 11:26:15 +08:00
committed by GitHub
parent ab162397cd
commit dcbd2f7a26

View File

@@ -989,6 +989,14 @@ function isInteractable(element, hoverStylesMap) {
_jsConsoleError("Error getting jQuery click events:", e);
}
try {
if (hasAngularClickEvent(element)) {
return true;
}
} catch (e) {
_jsConsoleError("Error checking angular click event:", e);
}
return false;
}
@@ -1133,6 +1141,33 @@ function hasNgAttribute(element) {
return false;
}
// TODO: it's a hack, should continue to optimize it
function hasAngularClickEvent(element) {
const ctx = element.__ngContext__;
const tView = ctx && ctx[1];
if (!tView || !Array.isArray(tView.data)) {
return false;
}
const tagName = element.tagName.toLowerCase();
if (!tagName) {
_jsConsoleLog("Element has no tag name: ", element);
return false;
}
for (const tNode of tView.data) {
if (!tNode || typeof tNode !== "object") continue;
if (tNode.type !== 0 && tNode.type !== 2) continue; // 0: Element, 2: Container
if (tNode.value && tagName !== tNode.value.toLowerCase()) continue;
if (!Array.isArray(tNode.attrs)) continue;
if (tNode.attrs.includes("click")) {
return true;
}
}
return false;
}
function isAngularMaterial(element) {
if (!element.attributes[Symbol.iterator]) {
return false;