Cordova/Phonegap iOS - 应用程序发送到后台后更改了 html5 输入文本类型

Posted

技术标签:

【中文标题】Cordova/Phonegap iOS - 应用程序发送到后台后更改了 html5 输入文本类型【英文标题】:Cordova/Phonegap iOS - html5 input text type changed after application is sent to background 【发布时间】:2014-08-10 11:36:17 【问题描述】:

我是 phonegap/cordova 开发的新手,我的应用程序的 cordova webview 上的键盘有问题。

我想要实现的是有一个键盘类型的输入文本,它只显示数字键盘(即 type="tel")并且还隐藏输入到输入文本框中的字符(即 type="密码”)。我试图实现这种行为是通过使用 javascript 更改输入类型两次。这是代码:

<script>
        function changeInputType()
            document.getElementById("txtPin").setAttribute("type", "tel");
            setTimeout(function()document.getElementById("txtPin").setAttribute("type", "password");, 750);
        
</script>

//here is how I use it on the html input 
<input type = "tel" id="txtPin" onlick="changeInputType()" onkeypress="changeInputType()"/>

当用户在文本框上键入时,这个肮脏的技巧可以正常工作,但是当键盘存在并且我按下主页按钮或执行任何导致应用程序发送到后台的操作时,然后我返回打开再次应用,键盘类型将更改为默认文本键盘。当我关闭键盘然后通过单击文本框再次打开它时,javascript似乎不再起作用。

所以,如果有人知道我在这里做错了什么,或者对我可以做些什么来解决这个问题有任何建议,请帮忙。

谢谢!干杯!

【问题讨论】:

【参考方案1】:

我发现要让键盘再次返回数字(type="tel")是通过当前可见视图控制器调用我的 AppDelegate 上的 javascript 方法,如下所示:

//get the current visible view controller
UIViewController *viewController = ((UINavigationController*)self.window.rootViewController).visibleViewController;

if([viewController isKindOfClass:[MyViewController class]])


    MyViewController *vc = (MyViewController *)viewController;
    if(vc.webView respondsToSelector:@selector(stringByEvaluatingJavaScriptFromString:)
    
        //call the javascript function on the webview
        [vc.webView stringByEvaluatingJavaScriptFromString:@"changeInputType"];
    

【讨论】:

以上是关于Cordova/Phonegap iOS - 应用程序发送到后台后更改了 html5 输入文本类型的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 8 上的 Cordova / PhoneGap 应用程序中隐藏键盘表单附件栏? [复制]

如何在iOS 8上的Cordova / PhoneGap应用程序中隐藏键盘表格附件栏? [重复]

Cordova / Phonegap 和 iOS 8.1 库路径

Cordova/Phonegap iOS - 应用程序发送到后台后更改了 html5 输入文本类型

在 iOS 上调试 Cordova (PhoneGap) 代码

在适用于 iOS 的 Cordova / PhoneGap 应用程序上修改用户代理字符串