很遗憾,谷歌没有API事件来跟踪这个,但是我们可以使用
Mutation Observer Web API来自己跟踪Google API对DOM的更改。它被浏览器很好地支持:
。
首先,我们需要创建一个目标元素,以便观察Google iframe的出现。我们将把document.body作为目标,因为iframe将附加到它上面。
const targetElement = document.body;
然后我们需要为MutationObserver创建一个配置对象。在这里,我们可以指定我们将跟踪DOM更改的确切内容。请注意,默认情况下所有值都为“false”,因此我们只能保留“childList”-这意味着我们仅观察目标元素(在我们的情况下是document.body)的子节点更改:
const observerConfig = {
childList: true,
attributes: false,
attributeOldValue: false,
characterData: false,
characterDataOldValue: false,
subtree: false
};
然后我们需要创建一个函数,当观察者检测到我们在配置对象中指定的特定类型的DOM更改时,将调用该函数。第一个参数表示Mutation Observer对象的数组。
function DOMChangeCallbackFunction(mutationRecords) {
mutationRecords.forEach((mutationRecord) => {
if (mutationRecord.addedNodes.length) {
var reCaptchaParentContainer = mutationRecord.addedNodes[0];
var reCaptchaIframe = reCaptchaParentContainer.querySelectorAll('iframe[title*="recaptcha"]');
if (reCaptchaIframe.length) {
console.log('Yay!');
reCaptchaObserver.disconnect();
}
}
});
}
那就差不多了。唯一剩下的是实例化观察者本身并开始观察DOM更改:
const reCaptchaObserver = new MutationObserver(DOMChangeCallbackFunction)
reCaptchaObserver.observe(targetElement, observerConfig)
希望这有所帮助 :)
g-recaptcha-bubble-arrow
- 查找变异可能有所帮助:https://dev59.com/q3A75IYBdhLWcg3wlqAT - colecmc