除非窗口处于焦点中,否则文本字段不会聚焦

Text field won't focus unless window is in focus

本文关键字:文本 字段 聚焦 窗口 于焦点 焦点      更新时间:2023-09-26

我有一个Greasemonkey脚本,可以自动输入用户信息。但是在提交表单之前,字段必须成为焦点(我认为他们使用 AngularJS 来验证是否输入了有效的名称/电子邮件)。所以在我的代码中,我这样做:

document.getElementById('name').value = "Name here"; //Enter name in field
document.getElementById('name').focus(); //Focus on the field

这工作正常,但仅当窗口处于活动状态时。如果窗口未处于活动状态,它将输入名称,但该字段不会成为焦点(因此无法提交)。是否可以进行任何修改来解决此问题?

编辑:我很难提供一个示例,因为代码必须从未活动的窗口运行,但这是输入字段的代码。

<input id="namefield[name]" name="name" ng-model="nameField.form.name" ng-pattern="nameRegex()" placeholder="John Doe" required="" style="width: 246px" type="text" class="ng-valid-pattern ng-dirty ng-valid ng-valid-required">

AngularJS在很大程度上是由AJAX驱动的,所以它可能是一个计时问题。 JS,尤其是计时器,在没有焦点的页面上会变慢。

因此,可能仅使用 AJAX 感知技术就足够了。例如:

// ==UserScript==
// @name     _Focus the name input
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/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.
*/
waitForKeyElements ("#name", focusInput, true);
function focusInput (jNode) {
    jNode[0].focus ();
}

请注意,问题代码列出:<input id="namefield[name]"...但是搜索 ID name .
如果这不是一个错误,这表明AngularJS正在重写HTML(我还没有学到很多AngularJS) - 这将进一步证明原始脚本的工作是由于赢得了竞争条件。 也就是说,根本不可靠。