先说解决方案:
1.1.利用ime-mode属性(注意只有Firefox 和 IE浏览器支持,其他浏览器不支持)
2.当input 类型为 密码框时(type=password),只能输入英文,利用这一特性,创建一个同等大小的div覆盖在密码输入框上。该方法来至 https://juejin.cn/post/7236689719077011514?from=search-suggesthttps://juejin.cn/post/7236689719077011514?from=search-suggest
以下桌面应用解决的方案
3. Electron vue桌面应用,可以使用如上第2种方案,也可使用ffi-napi,调用 user32.dll 动态链接库,进行切换输入法
4.如果觉得ffi-napi麻烦,可以使用C# 封装动态链接库进行调用
5.也可使用golang调用user32.dll 生成exe工具,然后使用子进程调用exe,
以下为golang demo
package main import ( "fmt" "syscall" ) var ( //调用user32.dll user32 = syscall.NewLazyDLL("user32.dll") // SendMessage 使用 user32 SendMessage 函数 SendMessage = user32.NewProc("SendMessageW") //获取一个台窗口的句柄 getForegroundWindowProc = user32.NewProc("GetForegroundWindow") // WM_INPUTLANGCHANGEREQUEST 激活新的输入区域设置指令 WM_INPUTLANGCHANGEREQUEST = 0x0050 // EN 美式键盘 EN = 0x0409 ) func main() { ret, _, _ := getForegroundWindowProc.Call() hwnd := syscall.Handle(ret) result, _, _ := SendMessage.Call(uintptr(hwnd), uintptr(WM_INPUTLANGCHANGEREQUEST), 0, uintptr(EN)) fmt.Println(result) }
编译好的文件地址: 百度网盘 请输入提取码
说明:调用user32.dll 因为是直接指定美式键盘 0x0409 所以需要在windows 添加语言如下图所示
总结 以上方法第2种是最佳可行方案 ,桌面应用可以使用第2,4,5种