You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Firefox中调用本地应用实现Windows屏幕键盘自动唤起与关闭

可行实现方案

方案核心思路

Firefox的沙箱安全机制默认禁止前端JS直接调用本地可执行文件,结合你完全管控终端Windows 10设备的前提,通过本地轻量HTTP服务做中间层的方案实现成本最低、兼容性最好,完全满足你对弹窗输入场景的适配要求。

具体实现步骤

1. 开发本地中间服务

用任意你熟悉的语言写一个仅监听本地回环地址的极简HTTP服务,仅开放两个控制接口:

  • 启动软键盘接口:调用Windows自带的osk.exe
  • 关闭软键盘接口:结束osk.exe进程
    以Python为例,核心参考代码:
from flask import Flask
import os
import psutil

app = Flask(__name__)

# 严格限制跨域白名单为你的本地Web应用地址,避免安全风险
@app.after_request
def add_cors_header(response):
    response.headers['Access-Control-Allow-Origin'] = 'http://localhost:你Web应用的运行端口'
    return response

@app.route('/open_osk')
def open_osk():
    os.startfile("C:\\Windows\\System32\\osk.exe")
    return "ok"

@app.route('/close_osk')
def close_osk():
    for proc in psutil.process_iter(['name']):
        if proc.info['name'].lower() == 'osk.exe':
            proc.kill()
    return "ok"

if __name__ == '__main__':
    # 仅监听本地回环地址,拒绝外部网络访问
    app.run(port=9527, host='127.0.0.1')

开发完成后把这个服务打包成exe,设置为Windows开机自启即可。

2. 前端JS交互逻辑

全局绑定输入框的焦点事件,调用中间服务接口即可,对原生alert、prompt以及sweetalert2生成的输入框完全生效:

// 监听全局焦点获取事件
document.addEventListener('focusin', (e) => {
  const isInputTarget = e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA' || e.target.isContentEditable
  if (isInputTarget) {
    fetch('http://127.0.0.1:9527/open_osk')
  }
})

// 监听全局焦点失去事件
document.addEventListener('focusout', (e) => {
  const isInputTarget = e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA' || e.target.isContentEditable
  if (isInputTarget) {
    fetch('http://127.0.0.1:9527/close_osk')
  }
})

3. Firefox适配配置

因为你的Web应用是本地托管的,调用本地HTTP服务需要关闭Firefox的混合内容拦截:

  • 地址栏输入about:config,确认风险提示进入配置页
  • 搜索security.mixed_content.block_active_content,设置为false
  • 搜索security.mixed_content.block_display_content,设置为false
    该配置仅对你的本地应用生效,不会影响其他网站的安全防护。

无服务替代方案

如果不想部署额外的本地服务,也可以通过Firefox自定义扩展实现:

  • 开发极简Firefox扩展,申请nativeMessaging权限
  • 编写对应本地原生消息宿主,注册到Windows注册表
  • 前端页面和扩展通信,扩展通过原生消息宿主调用系统接口启停软键盘
    该方案不需要运行独立HTTP服务,但开发和配置成本比前者略高。

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:51:00