gpt4 book ai didi

javascript - Greasemonkey 脚本不适用于动态插入的小部件

转载 作者:行者123 更新时间:2023-11-28 02:37:24 25 4
gpt4 key购买 nike

我正在尝试编写一个 Greasemonkey 脚本,如果找到的话,它会自动将焦点集中到验证码输入字段。除了动态插入验证码形式的情况之外,这工作正常,例如 this example 。我认为为 DOMNodeInserted 创建一个事件监听器应该可以处理这种情况。 (我正在 Firefox 17b 上进行测试)。

// ==UserScript==
// @name Focus captcha field
// @description Adds focus on captcha fields
// ==/UserScript==

function focusCaptcha (elem) {
var ids = ['recaptcha_response_field', 'adcopy_response', 'captcha_input'];
for (var i = ids.length - 1; i >= 0; i--) {
var input = elem.getElementById(ids[i]);
if (input) {
input.focus();
input.value = '';
return;
}
}
}

(function() {
focusCaptcha(document);
})();

document.addEventListener('DOMNodeInserted', function(event) {
focusCaptcha(event.target);
}, false);

最佳答案

DOMNodeInserted 是一个突变事件Mutation Events are deprecated有充分的理由。该代码可能会严重加载浏览器的 JS,并可能触发一些“脚本繁忙/失控”保护措施。

您可以切换到全新的 MutationObservers ,但这对于这类事情来说是复杂的杀伤力。

使用久经考验的waitForKeyElements() utility 。就像这样:

// ==UserScript==
// @name _Focus captcha field
// @description Adds focus on captcha fields
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change introduced
in GM 1.0. It restores the sandbox.
*/

function focusCaptcha (jNode) {
jNode.val ('');
jNode[0].focus ();
}

waitForKeyElements (
"#recaptcha_response_field, #adcopy_response, #captcha_input#",
focusCaptcha
);
<小时/>

请注意,当尝试移动焦点时,iframe可能会使事情变得复杂(尽管尚未测试过)。

关于javascript - Greasemonkey 脚本不适用于动态插入的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13278430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com