三星智能电视IME没有关注

时间:2014-06-02 03:25:34

标签: javascript samsung-smart-tv

当我尝试运行我的代码时,整个屏幕都很模糊,当我按下向上/向下键时,控制台显示IME input key skip and call event.preventDefault(), event.stopPropagation()

我的部分代码:

HTML:

<body onLoad="func_onLoad()" onunload="func_onUnload()">
    <input id="username" type="text" onkeydown="onkeydown_input(this)" class="input username" placeholder="Username" required/>
    <input id="password" type="password" onkeydown="onkeydown_input(this)" class="input password" placeholder="Password" required/>
</body> 

ime.js:

var username = null;
var password = null;
var currentIMEObj = null;

function func_onLoad(){
alert("func_onLoad begin...");

username = new IMEShell_Common();
username.inputboxID = "username";
username.inputTitle = "username";
username.inputDescription = "Please enter your username";
username.onKeyPressFunc = onKeyCallback_username;
username.context = this;
username.setBlockSpace(true);

password = new IMEShell_Common();
password.inputboxID = "password";
password.inputTitle = "password";
password.inputDescription = "Please enter your password";
password.onKeyPressFunc = onKeyCallback_password;
password.context = this;
password.setBlockSpace(true);

document.getElementById("username").focus();
username.onShow();
}


function func_onUnload() {
alert("func_onUnload begin...");
if(username)
    username.onClose();
if(password)
    password.onClose();
}

function onkeydown_input(obj){
alert("onkeydown_input");
var EKC = event.keyCode;

switch(EKC){
    case(29460)://Up key
        if(obj.id == "username"){
            document.getElementById("username").blur();
            username.onClose();
        }
        else if(obj.id == "password"){
            document.getElementById("username").focus();
            username.onShow();
            currentIMEObj = username;
        }
    break;

    case(29461)://Down key
        if(obj.id == "username"){
            document.getElementById("password").focus();
            password.onShow();  
            currentIMEObj = password;
        }
        else if(obj.id == "password"){
            document.getElementById("password").blur();
            password.onClose();
        }
    break;

    case(29443)://Enter key
        if(obj.id == "username"){
            username.onShow();
            currentIMEObj = username;
        }
        else if(obj.id == "password"){
            password.onShow();
            currentIMEObj = password;
        }
    break;

    case(88)://return
    break;

    case(45)://exit   
        return;
    break;
}
}

function onKeyCallback_username(key,str,id) {
alert("CALLBACK onKeyCallback ===================: " + key + " ID = " + id + " STR = " + str);
switch (key) {
    case (29443): // Enter Key
        alert("ENTER");
        break;
    case (88):  //return
        alert("RETURN");
        break;
    case (45):  //exit
        alert("EXIT");
        break;
}
}


function onKeyCallback_password(key,str,id) {
alert("CALLBACK onKeyCallback ===================: " + key + " ID = " + id + " STR = " + str);
switch (key) {
    case (29443): // Enter Key
        alert("ENTER");
        break;
    case (88):  //return
        alert("RETURN");
        break;
    case (45):  //exit
        alert("EXIT");
        break;
}
}

任何人都知道为什么用户名不会被关注,即使func_onLoad()方法中有document.getElementById("username").focus(); 以及调用event.preventDefault()的原因。

任何帮助表示赞赏!在此先感谢!!!

2 个答案:

答案 0 :(得分:0)

是的,我们在开发过程中遇到了类似的问题。如果您独立处理应用程序中的焦点,则会出现此问题。因此,如果您的应用程序使用独立框架来处理切换焦点和活动状态,则IME将无法正常工作,因为它会与您自己的应用程序的焦点发生冲突。唯一的解决方案是创建自己的IME。

答案 1 :(得分:0)

我不知道问题出现的原因,但我认为andrea-f的回答并不完全正确。 你的代码没问题。我知道因为我有同样的问题。我认为问题出在模拟器中。

我写了非常类似的代码,就像你的一样,我遇到了和你一样的问题(相同的错误,灰暗的屏幕等),但是当我在真实设备上测试应用程序时(我的三星智能F6400)它工作得很好。

在真实设备上试用您的应用。这是我给你的建议。

祝你好运!