2017-02-10 7 views
9

非常に興味深い問題があります。私はAndroidアプリケーションの中でinAppBrowserとスピナーを使用しています。 SpinnerはProgressDialogで実装されています。ここで問題となるのは、inAppBrowserを介してWebページを開こうとすると、ローディングスピナーが読み込みを開始した後に読み込みを開始し、ページの読み込みが終了したら、そのページの入力フィールドをタップして文字や数字を入力すると、いわゆる「ロックされた」状態にとどまります。私が何かをタイプすると、私はそれらを見ることができません、カーソルはちょうど点滅し続けます。これはさらに奇妙なようにするにInAppBrowserとスピナーローディングでページを読み込んだ後に入力フィールドに入力できません

、私は特別な文字を入力することができますよ。ページの周りの他の場所にタップして、同じ入力フィールドに再度タップすると、それが機能します。別のケースでは、アプリケーションを一時停止状態にしてから再開すると、入力フィールドが機能します。

この問題は、バージョン5.0.1以上のAndroidプラットフォームでのみ発生します。

inAppBrowser JavaファイルはInAppBrowser java fileでGithubの中に見つけることができます。

マイスピナーの実装は以下の通りです:

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(); 
} 

ここで問題になる可能性が何を?任意のヒント、提案をいただければ幸いです。

+0

Chromeのインスペクタを使用してデバイスでアプリをデバッグし、コンソールにエラーがないかどうか確認できますか? – Gandhi

+0

@ガンジー:私はすでにコメントしました。 –

答えて

5

これで問題を解決できました。問題はその特定のページ入力フィールドの焦点でした。何らかの理由で、ページの読み込みが完了しても、それ自体に焦点を当てていませんでした。

inAppBrowserのinAppBrowser.javaファイル内でeditText.clearFocus()を使用して問題を解決しようとした後にeditText.requestFocus()を実行しても問題が解決しませんでした。しかし私のために働いたのは解決策だった。

inAppBrowserにはexecuteScript()というメソッドがあるため、この問題が発生した特定の入力フィールドにいくつかのJavascriptコードを挿入できました。したがって、次のコードのトリックでした:

var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', location=yes'); 
ref.addEventListener('loadstop', function() { 
    ref.executeScript({code: "$('#element').blur(); $('#element').focus();"}); 
}); 

そのコードが何をするのかは、それが最初にその特定の要素からフォーカスをクリアし、再度、同じ要素に焦点を当てることです。

これは関係なく、大きなものであるバージョンの任意のプラットフォーム上で動作するようになりました。

+0

こんにちは、どのようにURLに焦点を当てましたか?それはイオン3で私のために働いていない、私は新しいURLを入力して通常のブラウザのように複数のウェブサイトを閲覧するのに役立つことができるように行くことができるようにURLに焦点を当てる必要があります。このようにしてもいいですか? –

0

誰かがまだ私のように、この問題を取得した場合は、最後のバージョン(1.7.2)にInAppBrowserプラグインを更新してみてください。

ionic cordova plugin rm cordova-plugin-inappbrowser --save 
ionic cordova plugin add cordova-plugin-inappbrowser --save 

バージョン1.7.2は、イオン性(V3)を使用して、このfix

- 私を有しています。

関連する問題