JavaScript调用屏幕键盘控件

JavaScript调用屏幕键盘控件表面上看起来有点复杂,仔细阅读完本文后一切都会变得轻轻松松。在运行下面的演示程序前请先正确安装屏幕键盘控件,安装方法详见:屏幕键盘控件安装指南

一、屏幕键盘控件演示(IE页面)

"屏幕键盘控件"演示(IE版)
屏幕键盘控件演示(HTML版)

二、演示页面下载

本地下载:屏幕键盘控件演示程序(HTML版)

三、演示IE页面源代码

<html>
    <!-- 版权所有 © 2018-2019 德常信息科技(上海)有限公司 -->
    <!-- 更多支持的输入法名称见官网:https://taosung.tech/index.php/2019/05/16/imelist/ -->
    <head>
        <script language="JScript">
            var lastFocusElement = null;

            function InitImm()
            {
                document.getElementById('OneLine').focus();
                document.getElementById('MsWubi').click();
            }

            function ChangeImm()
            {
                if (document.getElementById('MsWubi').checked) {
                    TouchKB.ImeName = "微软五笔";
                } 
                else if (document.getElementById('MsPinyin').checked) {
                    TouchKB.ImeName = "微软拼音";
                } 
                else if (document.getElementById('SogouWubi').checked) {
                    TouchKB.ImeName = "搜狗五笔";
                } 
                else if (document.getElementById('SogouPinyin').checked) {
                    TouchKB.ImeName = "搜狗拼音";
                } 
                else if (document.getElementById('SogouHandInput').checked) {
                    TouchKB.ImeName = "搜狗手写";
                } 
                else if (document.getElementById('SogouSpeechInput').checked) {
                    TouchKB.ImeName = "搜狗语音";
                } 
                else if (document.getElementById('QqWubi').checked) {
                    TouchKB.ImeName = "QQ五笔";
                } 
                else if (document.getElementById('QqPinyin').checked) {
                    TouchKB.ImeName = "QQ拼音";
                } 
                else if (document.getElementById('WangmaWubi').checked) {
                    TouchKB.ImeName = "王码五笔型";
                } 
                else if (document.getElementById('JipinWubi').checked) {
                    TouchKB.ImeName = "极品输入法";
                } 
                else if (document.getElementById('JidianWubi').checked) {
                    TouchKB.ImeName = "极点五笔";
                } 
                else if (document.getElementById('XunfeiPinyin').checked) {
                    TouchKB.ImeName = "讯飞输入法";
                } 
                else if (document.getElementById('BaiduWubi').checked) {
                    TouchKB.ImeName = "百度五笔";
                } 
                else if (document.getElementById('BaiduPinyin').checked) {
                    TouchKB.ImeName = "百度输入法";
                } 
                else if (document.getElementById('BaiduHandInput').checked) {
                    TouchKB.ImeName = "百度手写";
                } 
                else if (document.getElementById('BaiduSpeechInput').checked) {
                    TouchKB.ImeName = "百度语音";
                } 
                else if (document.getElementById('GooglePinyin').checked) {
                    TouchKB.ImeName = "谷歌拼音";
                } 
                else if (document.getElementById('SmartPinyin').checked) {
                    TouchKB.ImeName = "智能ABC";
                } 
                else
                {
                    TouchKB.ImeName = "美式键盘";
                }
                if (lastFocusElement != null)
                {
                    lastFocusElement.focus();
                }
            }

            function SaveFocus(Element)
            {
                lastFocusElement = Element;
            }
        </script>
    </head>
    <body onload="InitImm()">
        <br><br>
        <div id=TouchKeyboard>
            <table border="1">
                <tr>
                    <td align=center>单行输入</td>
                    <td><INPUT TYPE="text" id="OneLine" onBlur="SaveFocus(this)" style="width:100%"></td>
                </tr>
                <tr>
                    <td align=center>多行输入</td>
                    <td><textarea id="MultiLine" onBlur="SaveFocus(this)" style="width:100%" rows="10" spellcheck="false"></textarea></td>
                </tr>
                <tr>
                    <td align=center>输入法</td>
                    <td>
                        <input type="radio" name="IMM" id="English" onclick="ChangeImm()" />英语
                        <input type="radio" name="IMM" id="MsWubi" onclick="ChangeImm()" />微软五笔
                        <input type="radio" name="IMM" id="MsPinyin" onclick="ChangeImm()" />微软拼音
                        <input type="radio" name="IMM" id="SogouWubi" onclick="ChangeImm()" />搜狗五笔
                        <input type="radio" name="IMM" id="SogouPinyin" onclick="ChangeImm()" />搜狗拼音
                        <input type="radio" name="IMM" id="SogouHandInput" onclick="ChangeImm()" />搜狗手写
                        <input type="radio" name="IMM" id="SogouSpeechInput" onclick="ChangeImm()" />搜狗语音
                        <input type="radio" name="IMM" id="QqWubi" onclick="ChangeImm()" />QQ五笔
                        <input type="radio" name="IMM" id="QqPinyin" onclick="ChangeImm()" />QQ拼音
                        <input type="radio" name="IMM" id="WangmaWubi" onclick="ChangeImm()" />王码五笔
                        <input type="radio" name="IMM" id="JipinWubi" onclick="ChangeImm()" />极品五笔
                        <input type="radio" name="IMM" id="JidianWubi" onclick="ChangeImm()" />极点五笔<br>
                        <input type="radio" name="IMM" id="XunfeiPinyin" onclick="ChangeImm()" />讯飞拼音
                        <input type="radio" name="IMM" id="BaiduWubi" onclick="ChangeImm()" />百度五笔
                        <input type="radio" name="IMM" id="BaiduPinyin" onclick="ChangeImm()" />百度拼音
                        <input type="radio" name="IMM" id="BaiduHandInput" onclick="ChangeImm()" />百度手写
                        <input type="radio" name="IMM" id="BaiduSpeechInput" onclick="ChangeImm()" />百度语音
                        <input type="radio" name="IMM" id="GooglePinyin" onclick="ChangeImm()" />谷歌拼音
                        <input type="radio" name="IMM" id="SmartPinyin" onclick="ChangeImm()" />智能ABC
                    </td>
                </tr>
                <tr align="center">
                    <td align=center>屏幕键盘</td>
                    <td align=center>
                        <OBJECT
                            ID="TouchKB"
                            WIDTH=1024
                            HEIGHT=275
                            TYPE="application/x-oleobject"
                            CLASSID="CLSID:8C358811-5C86-444A-9F51-0E4A782B1A9D"
                            CODEBASE="https://taosung.tech/TouchKeyboard/TouchKB.cab#version=1,0,0,0">
                        </OBJECT>
                    </td>
                </tr>
            </table>
        </div>
    </body>
</html>

四、核心源代码详解

1、页面加载时先执行InitImm函数激活输入框焦点,然后再设置默认输入法;演示代码默认输入法是“微软五笔”,可以根据业务需要自由设定其它名称,输入法名称完整列表见:屏幕键盘控件输入法支持

function InitImm()
{
    document.getElementById('OneLine').focus();
    document.getElementById('MsWubi').click();
}

2、切换输入法时先保留当前焦点对象,利用onBlur事件的回调函数SaveFocus

<tr>
    <td align=center>单行输入</td>
    <td><INPUT TYPE="text" id="OneLine" onBlur="SaveFocus(this)" style="width:100%"></td>
</tr>
<tr>
    <td align=center>多行输入</td>
    <td><textarea id="MultiLine" onBlur="SaveFocus(this)" style="width:100%" rows="10" spellcheck="false"></textarea></td>
</tr>
<script language="JScript">
    
    var lastFocusElement = null;

    function SaveFocus(Element)
    {
        lastFocusElement = Element;
    }

</script>

3、执行切换输入法函数ChangeImm的最后必须恢复焦点对象,好处是用户实际使用屏幕键盘时不需要手动重复激活输入对象,一点小改变大大提高用户体验;

<script language="JScript">
    var lastFocusElement = null;

    // ...
    // ...
    // ...
    function ChangeImm()
    {
        // ...
        // ...
        // ...
        if (lastFocusElement != null)
        {
            lastFocusElement.focus();
        }
    }
</script>

五、技术支持

除了在官网推送技术类博文外,我们欢迎您来电子邮件获得业务或技术支持,如果您有什么好的建议也请给我们来邮件,谢谢。

屏幕键盘技术支持邮箱
屏幕键盘技术支持邮箱