热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【MUI】利用Native.js弹出软键盘打开WIFI

痛点很多时候我们会遇到这样一个细节,需要打开一个webview时:1)输入框自动获取焦点2)系统弹出软键盘准备新建一个htm

痛点

很多时候我们会遇到这样一个细节,需要打开一个webview时:
1)输入框自动获取焦点
2)系统弹出软键盘

准备

新建一个html文件,我暂且命名为input.html

clipboard.png

新建一个js文件,我暂且命名为app.js

clipboard.png

要输入框自动获取焦点,js很简单,但是为了兼容ios以及android,我们加上setTimeout

var iem;mui.ready(function(){iem = document.querySelector("input");setTimeout(function(){iem.focus(); },200);})

Native.js自动弹出软键盘

ok,那么弹出软键盘怎么办?这里我们将用到native.js来编写代码映射来调用原生,什么是Native.js?

我们在app.js写上弹出软键盘函数

window.App = (function($) {var app = {};/*** Input获取焦点 弹出软键盘* @param {HTMLInputElement} inputElem */app.showSoftInput = function(inputElem) {var nativeWebview, imm, InputMethodManager;var initNativeObjects = function() {if($.os.android) {//androidvar main = plus.android.runtimeMainActivity();var Context = plus.android.importClass("android.content.Context");InputMethodManager = plus.android.importClass("android.view.inputmethod.InputMethodManager");imm = main.getSystemService(Context.INPUT_METHOD_SERVICE);plus.android.importClass(nativeWebview);nativeWebview.requestFocusFromTouch();//显示软键盘imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);} else {//iosnativeWebview.plusCallMethod({"setKeyboardDisplayRequiresUserAction": false});}};$.plusReady(function() {nativeWebview = plus.webview.currentWebview().nativeInstanceObject();initNativeObjects();setTimeout(function() {inputElem.focus();}, 200);});}return app;
}(mui))

上面这个代码应该大家很熟悉了,在MUI问答社区有很多技术问答,当然也包括以上这些代码,但是呢?在ios设备上确实挺快的弹出了键盘,然而在中端左右的android设备上,延迟总会延迟那么一两秒,带来不好的用户体验,甚至用户第一次使用时不知道是自动弹出的,往往会在input上按下她们的手指,这时键盘弹出来了,可是我们写的自动弹出也并发了,导致键盘又弹缩回去了,我擦,怎么办?

解决方案1)

去除android的弹出键盘功能

解决方案2)

如果input已经被用户点击,即Input已经获取到了焦点的话,直接return;不执行自动弹出

第二种方案看起来可以接受的样子

/*** Input获取焦点 弹出软键盘* @param {HTMLInputElement} inputElem */app.showSoftInput = function(inputElem) {if(!inputElem) {//如果没有传入input则returnreturn;}if(!inputElem.id) {//如果当前input没有id,就给个默认的idthis.input.id = inputElem.id = 'InputDefultId';}var nativeWebview, imm, InputMethodManager;var initNativeObjects = function() {if($.os.android) {var main = plus.android.runtimeMainActivity();var Context = plus.android.importClass("android.content.Context");InputMethodManager = plus.android.importClass("android.view.inputmethod.InputMethodManager");imm = main.getSystemService(Context.INPUT_METHOD_SERVICE);plus.android.importClass(nativeWebview);nativeWebview.requestFocusFromTouch();//强制显示软键盘 //imm.showSoftInput(nativeWebview,InputMethodManager.SHOW_FORCED);imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);} else {nativeWebview.plusCallMethod({"setKeyboardDisplayRequiresUserAction": false});}};$.plusReady(function() {if(document.activeElement.id === inputElem.id) {//如果当前活动,也就是获取到了焦点的是input的话,那么就不执行自动弹出键盘return;}nativeWebview = plus.webview.currentWebview().nativeInstanceObject();initNativeObjects();setTimeout(function() {inputElem.focus();}, 200);});}

嘿嘿,在这里我将再安利大家一个小技巧

native调用的是原生,语法上是跟原生差不多的,这里用android来讲解,例如您要实现弹出软键盘的功能,我们打开百度搜索(android 弹出软键盘)

先看看native实现android弹出软键盘的代码

clipboard.png

再来看看我们百度的 android原生实现的代码

clipboard.png

是不是tm好像啊?哈哈

Native.js打开WIFI

我们再来一个栗子u=1556826177,1292336595&fm=116&gp=0.jpg

百度一下 (android 打开wifi)

clipboard.png

楼主老实说,android我只入了个门,像打开wifi的代码我都还没写过clipboard.png

但是并不要紧,我们开始造轮子!!!

编写js代码

/*** 设置wifi状态*/app.setWifi = function(isEnable){$.plusReady(function(){if($.os.android){isEnable = !!isEnable;//获取上下文var Context = plus.android.importClass("android.content.Context"),//导入wifi管理模块WifiManager = plus.android.importClass("android.net.wifi.WifiManager"),//获取wifi服务wifiManager = plus.android.runtimeMainActivity().getSystemService(Context.WIFI_SERVICE);wifiManager.setWifiEnabled(isEnable);//false 为关闭}});}

对比一下,是不是很清真?哈哈,ios打开wifi的话,目前是这种解决方案
跳转到wifi设置状态下

if($.os.ios){plus.runtime.openURL("prefs:root=WIFI");//ios需要手动打开}

Native.js好玩吗?

好不好玩,您不试试怎么知道?



推荐阅读
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 资源:吊炸天!74款APP完整源码!android界面中点击输入框时弹出输入法如果输入框在底部会出现输入法遮挡输入内容的问题解决办法设置activity的windowsoftinpu ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了预加载多个本地WebView相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Android Studio中的IBM MobileFirst Compile问题 - IBM MobileFirst Compile in Android Studio Issue
    IbuiltaMultipageapplicationbyusingIBMMobileFirst,accordingto据我所知,我使用IBMMobileFirst构建了一个 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Android获取app应用程序大小的方法
    Android获取app应用程序大小的方法-Android对这种方法进行了封装,我们没有权限去调用这个方法,所以我们只能通过AIDL,然后利用Java的反射机制去调用系统级的方法。 ... [详细]
author-avatar
mobiledu2502875393
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有