我有一个非常有趣的问题。 我使用inAppBrowser和微调在我的Android应用程序之一。 微调器是用ProgressDialog
实现的。 这里的问题是,当我尝试通过inAppBrowser打开一个网页,并加载微调开始加载一旦页面开始加载,然后closures一旦完成加载页面,当我点击该页面的input字段,并尝试键入字母或数字,它只是停留在所谓的“locking”状态。 如果我input了一些我看不到的东西,光标只是闪烁。
为了使这更奇怪,我可以input特殊字符。 如果我点击页面周围的任何其他地方,然后再次点击相同的input字段,然后工作。 另一种情况是,当我把应用程序暂停状态,然后恢复它,input字段的工作。
此问题仅在版本5.0.1及更高版本的Android平台中发生。
inAppBrowser java文件可以在InAppBrowser java文件的 Github中find。
我的微调执行如下:
spinner = new ProgressDialog(cordova.getActivity()); spinner.setIndeterminate(false); spinner.setProgressStyle(ProgressDialog.STYLE_SPINNER); spinner.setCancelable(false); spinner.setMessage(cordova.getActivity().getText(R.string.spinner_loading)); spinner.setTitle("");
我用下面的方式显示/隐藏微调:
@Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); //InAppBrowser default code.... try { JSONObject obj = new JSONObject(); obj.put("type", LOAD_START_EVENT); obj.put("url", newloc); sendUpdate(obj, true); } catch (JSONException ex) { Log.d(LOG_TAG, "Should never happen"); } spinner.show(); } public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); try { JSONObject obj = new JSONObject(); obj.put("type", LOAD_STOP_EVENT); obj.put("url", url); sendUpdate(obj, true); } catch (JSONException ex) { Log.d(LOG_TAG, "Should never happen"); } spinner.hide(); }
这里可能是什么问题? 任何提示,build议将不胜感激。
现在我能够解决这个问题。 问题是该特定页面input字段的焦点。 由于某种原因,一旦页面加载完成,它并没有把注意力集中在自己身上。
尝试使用editText.clearFocus()
修复inAppBrowser inAppBrowser.java
文件中的问题,然后使用editText.requestFocus()
完全没有帮助。 但是,对我来说,解决scheme就是如此。
由于inAppBrowser有一个名为executeScript()
的方法,我能够注入一些Javascript代码到具有此问题的特定input字段。 因此下面的代码做了这个技巧:
var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', location=yes'); ref.addEventListener('loadstop', function() { ref.executeScript({code: "$('#element').blur(); $('#element').focus();"}); });
该代码做的是,它将首先清除该特定元素的焦点,然后重新聚焦在同一个元素上。
无论版本大是什么,这都转到了任何平台上。
如果有人仍然遇到这个问题,请尝试将InAppBrowser插件更新到最新版本(1.7.2)。
ionic cordova plugin rm cordova-plugin-inappbrowser --save ionic cordova plugin add cordova-plugin-inappbrowser --save
版本1.7.2有这个修复
我正在使用Ionic(v3)。