如何防止 Vivaldi 在通过 AutoHotKey 打开后随机聚焦 URL 字段而不是自动聚焦文本输入?

如何防止 Vivaldi 在通过 AutoHotKey 打开后随机聚焦 URL 字段而不是自动聚焦文本输入?

我有这个 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 上(使用F8Ctrl+L ↗Vivaldi 帮助),然后将预期数量的Tab按键发送到网页内的焦点目标表单控件。

如果你可以控制网页内容,那么还有更可靠的解决方案:调整 HTML 以包含键盘快捷键可聚焦您的输入框accesskey属性)。然后,让 AHK 发送该组合。例如:如果您分配accesskey="a"给输入框,则发送Alt+ Shift+ A(↗Vivaldi 帮助)以聚焦此输入框。
注意:在开始工作之前,可能需要在 Vivaldi 中启用访问键 - 请参阅最后一个超链接。


编辑:

绝望的解决方案聚焦 URL 栏,但可行:
通过将其默认值移动到剪贴板来测试对您的字段的关注。

  1. 在您的输入框中有一个特殊的默认值,例如“X”。
  2. 在 AHK 脚本中,备份剪贴板内容(ClipboardOld := ClipboardAll)。
  3. 在 AHK 中,清空剪贴板。(Clipboard =
  4. 在 AHK 中,Send {Tab}^x (移动焦点,然后剪切选择)
  5. 使用带有超时的 ClipWait ( ClipWait ,,1) 查看剪贴板是否已填充,并测试它是否包含步骤 1 中的默认值。(If (Clipboard <> "X") ...
  6. 如果是,则说明您已集中精力,代码可以继续。如果不是,则循环进行相同的尝试(步骤 4)几次,然后失败。
  7. 在上述任何一种情况下,从备份中恢复剪贴板内容并释放变量。(Clipboard := ClipboardOldClipboardOld =

相关内容