我有这个 AutoHotKey 热键:
F2::
Run, "http://127.0.0.1/test/"
KeyWait, F2
return
因此,当我按下F2
键盘上的按钮时,它会在我的 Web 浏览器中打开 URL http://127.0.0.1/test/
,也就是 Vivaldi。
如果 Vivaldi 已打开,它会在新选项卡中打开并聚焦它。如果 Vivaldi 尚未打开,它会将 Vivaldi 和 URL 作为唯一选项卡打开。
该index.html
页面是有效的 HTML,正文中只有一个简单的文本字段,如下所示:
<div><input spellcheck="true" type="text" name="phrase" id="phrase" size="48" tabindex="1" autofocus></div>
最多大多数情况下,这种方法是有效的。但是,“有时”,我无法弄清楚为什么会发生这种情况(尽管我试了一遍又一遍),输入不会自动聚焦。相反,Vivaldi 会聚焦 URL 字段,因此我开始在 URL 字段中输入内容,而不是在页面上输入文本。
很难解释这有多烦人,因为我每天都会使用这种机制大约一万次。我试过很多次,但每当我试图让它发生时,我就是无法重现它。它总是在我最意想不到的时候发生,似乎毫无理由。
它不依赖于 Vivaldi 是否已在运行。它也不似乎F2
尽管我不能肯定地说,但这与我按下按钮后开始打字的速度有关。
我以前也用过 Pale Moon,但没出现这种情况,所以这一定与 Vivaldi 有关。(不,不能切换回 Pale Moon。)
各位超级用户能否告诉我一些解决方案以让我保持理智?
答案1
我从各种 AHK 自动化中了解到这种情况。但与其寻找重点是什么以及为什么,不如解决方法问题:
在预期打开页面后,不要考虑将焦点默认放在页面控件上(例如文本输入)。相反,明确地将焦点放在 URL 上(使用F8或Ctrl+L ↗Vivaldi 帮助),然后将预期数量的Tab按键发送到网页内的焦点目标表单控件。
如果你可以控制网页内容,那么还有更可靠的解决方案:调整 HTML 以包含键盘快捷键可聚焦您的输入框(accesskey
属性)。然后,让 AHK 发送该组合。例如:如果您分配accesskey="a"
给输入框,则发送Alt+ Shift+ A(↗Vivaldi 帮助)以聚焦此输入框。
注意:在开始工作之前,可能需要在 Vivaldi 中启用访问键 - 请参阅最后一个超链接。
编辑:
绝望的解决方案后聚焦 URL 栏,但可行:
通过将其默认值移动到剪贴板来测试对您的字段的关注。
- 在您的输入框中有一个特殊的默认值,例如“X”。
- 在 AHK 脚本中,备份剪贴板内容(
ClipboardOld := ClipboardAll
)。 - 在 AHK 中,清空剪贴板。(
Clipboard =
) - 在 AHK 中,
Send {Tab}^x
(移动焦点,然后剪切选择) - 使用带有超时的 ClipWait (
ClipWait ,,1
) 查看剪贴板是否已填充,并测试它是否包含步骤 1 中的默认值。(If (Clipboard <> "X") ...
) - 如果是,则说明您已集中精力,代码可以继续。如果不是,则循环进行相同的尝试(步骤 4)几次,然后失败。
- 在上述任何一种情况下,从备份中恢复剪贴板内容并释放变量。(
Clipboard := ClipboardOld
,ClipboardOld =
)