找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 524|回复: 11

[求助] 输入法中文模式下无法通过输入字母跳转到搜索引擎

[复制链接]

29

主题

150

回帖

1091

积分

金牌会员

积分
1091
发表于 2025-8-27 05:28:19 | 显示全部楼层 |阅读模式
如题,正常情况下,如果选中的是网页中的文本,非输入框,右键点击"使用其他搜索引擎搜索",假设有aa、ab、ba、bb这4个搜索引擎,按a是会在aa、ab之间切换的。

而如果选中的是输入框内的文字,并且此时是中文输入法,按a是会变成直接打字的,这是预期行为吗?我偶尔也会在这种情况下操作,每次都要提前换成英文输入法,有点麻烦,有什么办法让"焦点"一直在右键菜单上吗?


回复

使用道具 举报

9

主题

9132

回帖

2万

积分

超级版主

(^^ゞ

积分
24996
发表于 2025-8-27 12:11:05 | 显示全部楼层
情况有点复杂,按照我的理解在输入框时的这个情况应该是符合预期的,因为在输入框内输入法程序是激活的,按下 A 键后按键消息是先经由输入法程序处理的,若此时处于中文输入状态,那它会接受并处理这个按键,并且不会再向后抛出这个按键消息,所以浏览器就看不到这个按键消息也就无法响应它了。此外,严格来说,当打开右键菜单时“焦点”其实已经是在右键菜单上的,但由于输入法程序监听的是焦点所在输入上下文(即此处的输入框),所以它依旧在响应按键消息。

不过我想也许可以通过使用脚本在右键菜单打开时暂时禁用输入法,关闭后再恢复也许能够处理这种情况,等我有时间写一个测试看看是否可行
¯\(°_o)/¯
回复

使用道具 举报

29

主题

150

回帖

1091

积分

金牌会员

积分
1091
 楼主| 发表于 2025-8-27 12:43:29 | 显示全部楼层
本帖最后由 vrgf1ew 于 2025-8-27 12:54 编辑
S8F8ry 发表于 2025-8-27 12:11
情况有点复杂,按照我的理解在输入框时的这个情况应该是符合预期的,因为在输入框内输入法程序是激活的, ...

多谢版主回复!另外我补充下,因为我遇到的常见情景是:通过某个搜索引擎搜索出结果后,想再利用其他搜索引擎进行检索,自然地就选中输入框内的文字进行右键搜索。而我的搜索引擎又特别多,甚至需要滚动查找了,我便习惯通过输入首字母进行跳转了。有更好的做法吗?
回复

使用道具 举报

7

主题

207

回帖

2295

积分

金牌会员

积分
2295
发表于 2025-8-27 17:52:47 | 显示全部楼层
我这里用的搜狗输入法,可以这样直接切换到目标搜索引擎
回复

使用道具 举报

9

主题

9132

回帖

2万

积分

超级版主

(^^ゞ

积分
24996
发表于 2025-8-27 19:15:37 | 显示全部楼层
weaver66 发表于 2025-8-27 17:52
我这里用的搜狗输入法,可以这样直接切换到目标搜索引擎

那说明搜狗输入法是会继续向后抛出按键的事件,我这边用的小狼毫也跟楼主提到的一样不会继续由浏览器响应。
¯\(°_o)/¯
回复

使用道具 举报

9

主题

9132

回帖

2万

积分

超级版主

(^^ゞ

积分
24996
发表于 2025-8-27 22:46:06 | 显示全部楼层
大概写了个能让处于中文输入状态下的按键触发到菜单项的油猴脚本,不完美但是起码能用 🤪
  1. // ==UserScript==
  2. // @name         Context menu key trigger
  3. // @version      0.1.0
  4. // @description  Allow context menus to be triggered by a key press
  5. // @author       dragonish
  6. // @namespace    https://github.com/dragonish
  7. // @license      GNU General Public License v3.0 or later
  8. // @match        *://*/*
  9. // @grant        none
  10. // ==/UserScript==

  11. (function () {
  12.   document.querySelectorAll('input, textarea').forEach(ele => {
  13.     ele.addEventListener('contextmenu', function () {
  14.       this.blur();
  15.       const curEle = document.activeElement;
  16.       document.body.addEventListener('click', () => {
  17.         if (document.activeElement === curEle) {
  18.           this.focus();
  19.         }
  20.       }, {
  21.         once: true
  22.       });
  23.     });
  24.   });
  25. })();
复制代码
¯\(°_o)/¯
回复

使用道具 举报

29

主题

150

回帖

1091

积分

金牌会员

积分
1091
 楼主| 发表于 2025-8-28 15:04:08 | 显示全部楼层
本帖最后由 vrgf1ew 于 2025-8-28 15:09 编辑
S8F8ry 发表于 2025-8-27 22:46
大概写了个能让处于中文输入状态下的按键触发到菜单项的油猴脚本,不完美但是起码能用 🤪
...

请问下这个脚本还有什么地方无法生效呢?我能想到的就是内置的一些页面了。

另外问下16至23行部分的代码的目的是?没有这部分也能生效吧。
回复

使用道具 举报

9

主题

9132

回帖

2万

积分

超级版主

(^^ゞ

积分
24996
发表于 2025-8-28 18:57:52 | 显示全部楼层
vrgf1ew 发表于 2025-8-28 15:04
请问下这个脚本还有什么地方无法生效呢?我能想到的就是内置的一些页面了。

另外问下16至23行部分的代码 ...

一般的输入框应该都能生效;因为脚本本质上是移除掉了输入框的输入焦点,所以加了个事件让它还原回焦点,不需要的话删掉也不影响。
¯\(°_o)/¯
回复

使用道具 举报

29

主题

150

回帖

1091

积分

金牌会员

积分
1091
 楼主| 发表于 7 天前 | 显示全部楼层
S8F8ry 发表于 2025-8-28 18:57
一般的输入框应该都能生效;因为脚本本质上是移除掉了输入框的输入焦点,所以加了个事件让它还原回焦点, ...

抖音的搜索框无效生效:发现更多精彩视频 - 抖音搜索

回复

使用道具 举报

9

主题

9132

回帖

2万

积分

超级版主

(^^ゞ

积分
24996
发表于 7 天前 | 显示全部楼层
vrgf1ew 发表于 2025-9-6 15:59
抖音的搜索框无效生效:发现更多精彩视频 - 抖音搜索

那单独给抖音换一种写法吧:
  1. // ==UserScript==
  2. // @name         Context menu key trigger
  3. // @version      0.2.0
  4. // @description  Allow context menus to be triggered by a key press
  5. // @author       dragonish
  6. // @namespace    https://github.com/dragonish
  7. // @license      GNU General Public License v3.0 or later
  8. // @match        *://*/*
  9. // @grant        none
  10. // ==/UserScript==

  11. (function () {
  12.   function inputHandler(ele) {
  13.     ele.blur();
  14.     const curEle = document.activeElement;
  15.     document.body.addEventListener('click', () => {
  16.       if (document.activeElement === curEle) {
  17.         ele.focus();
  18.       }
  19.     }, {
  20.       once: true
  21.     });
  22.   }
  23.   document.querySelectorAll('input, textarea').forEach(ele => {
  24.     ele.addEventListener('contextmenu', function () {
  25.       inputHandler(this);
  26.     });
  27.   });
  28.   if (location.href.includes('douyin.com')) {
  29.     document.body.addEventListener('contextmenu', function (evt) {
  30.       if (evt.target) {
  31.         const ele = evt.target;
  32.         if (ele.nodeName === 'INPUT') {
  33.           inputHandler(ele);
  34.         }
  35.       }
  36.     });
  37.   }
  38. })();
复制代码
¯\(°_o)/¯
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|百分浏览器论坛

GMT+8, 2025-9-13 19:15 , Processed in 0.017649 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表