2017-02-10 2 views
9

J'ai un problème très intéressant. J'utilise inAppBrowser et spinner dans une de mes applications Android. Spinner est implémenté avec ProgressDialog. Le problème ici est que lorsque j'essaie d'ouvrir une page Web via InBrowser et que le spinner de chargement commence à charger une fois que la page commence à charger et se ferme une fois le chargement de la page terminé, lorsque je tape sur le champ de saisie de cette page tapez des lettres ou des chiffres, il reste simplement dans cet état dit "verrouillé". Si je tape quelque chose je ne peux pas les voir, le curseur continue de clignoter. Pour rendre cela encore plus bizarre, je suis capable de taper des caractères spéciaux. Si je tape à un autre endroit autour de la page, puis appuyez à nouveau sur ce même champ de saisie, alors cela fonctionne. Un autre cas où cela fonctionne est lorsque je mets l'application en état Pause et ensuite le reprendre, les champs de saisie fonctionnent.Impossible de taper dans le champ de saisie après le chargement d'une page avec InAppBrowser et le chargement de spinner

Ce problème se produit uniquement sur les plates-formes Android de version 5.0.1 et antérieures.

Le fichier java inAppBrowser peut être trouvé dans Github au InAppBrowser java file.

Ma mise en œuvre de spinner est le suivant:

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

et j'afficher/masquer une fileuse avec la manière suivante:

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

Quel pourrait être le problème ici? Tous les conseils, suggestions seraient appréciés.

+0

Pourriez-vous déboguer l'application dans l'appareil à l'aide de l'inspecteur de chrome et vérifier s'il y a une erreur dans la console? – Gandhi

+0

@Gandhi: Je l'ai déjà réparé, merci pour le commentaire. –

Répondre

5

Maintenant, j'étais capable de résoudre le problème. Le problème était l'objet de ce champ de saisie de page spécifique. Pour une raison quelconque, il n'a pas eu le focus sur lui-même une fois que la page a été terminée de chargement.

En essayant de résoudre le problème dans le fichier inAppBrowser.java d'inAppBrowser en utilisant editText.clearFocus(), puis editText.requestFocus() n'a pas aidé du tout. Mais ce qui a fonctionné pour moi était la solution suivante.

Étant donné que inAppBrowser a une méthode appelée executeScript(), j'ai pu injecter du code Javascript dans ce champ d'entrée spécifique qui avait ce problème. Ainsi, le code suivant fait le tour:

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

Qu'est-ce que le code faire est qu'il va d'abord effacer l'accent sur cet élément spécifique et ensuite se concentrer sur ce même élément nouveau.

Ceci a fonctionné sur n'importe quelle plate-forme indépendamment de la version qui est grande chose.

+0

Salut, Comment vous êtes-vous concentré sur l'URL? il n'a pas fonctionné pour moi en ionique 3, je dois me concentrer sur l'url afin que je puisse taper une nouvelle URL et passer par normalement comme un navigateur peut m'aider à parcourir plusieurs sites Web. Puis-je faire la chose de cette façon? –

0

Si quelqu'un rencontre toujours ce problème, essayez de mettre à jour le plugin InAppBrowser vers la dernière version (1.7.2).

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

La version 1.7.2 a cette fix

Je utilise ionique (v3).