0

Mon application Android injecte du code JS dans un WebView. Il est ciblé Android 3.1, mais je rencontre un problème avec Android 6 et 7 parce que le WebView est maintenant chrome à l'intérieur, donc ce n'est pas l'ancien WebView.L'injection JavaScript ne fonctionne pas sur Android Chromium WebView lorsque la cible est Android 3.1

Néanmoins, la question est très étrange, donc je ne pense pas que ce soit à cause de la quirksmode mes forces d'applications à Android 6 et 7.

Mon application utilise tous les appels utiles pour charger l'interface JS qui crée une liaison de entre le code Java et le code JS, et cela fonctionne sur les versions précédentes. Après ces instructions (méthode addJavascriptInterface()) il effectue un chargement « faux » pour assurer l'interface JS est chargé:

webView.loadData("", "text/html", null); 

et lorsque la « page » est chargé, il effectue le chargement de l'URL réelle, c'est un fichier local (fichier: /// ...); quand ceci est chargé aussi, un script est injecté et exécuté.

Ce que je ressens est que je reçois l'erreur suivante sur le chat de journal en continu:

Cannot call determinedVisibility() - never saw a connection for the pid: 

et j'ai essayé les différentes suggestions trouvées sur le SO à ce sujet, mais sans succès:

c'est la " data: text/html "url qui continue à être chargé encore et encore et je peux l'arrêter en chargeant seulement une url vide mais alors l'interface JS est perdue.

Que dois-je faire pour conserver l'interface JS et bloquer la boucle de chargement infinie?

Répondre

0

Ce type de problème a été corrigé en changeant le premier appel "faux" qui était destiné à ajouter efficacement l'interface JS (nécessaire) à WebView.

La méthode mentionnée ci-dessus, avec cette instruction:

webView.loadData("", "text/html", null); 

travaillé uniquement avec des versions antérieures à 6.x Android (cela peut dépendre des dispositifs, il pourrait échouer aussi 4.4 et 5.x, mais mon application a travaillé sur les deux).

Ainsi, la bonne méthode de travail sur toutes les versions est de charger le fichier cible deux fois (effectuer un nouveau chargement lorsque le premier a terminé),

ou il est également possible de charger un autre fichier (comme un HTML simple sans contenu dans le corps) d'abord, puis charger le fichier cible (lorsque le premier chargement est terminé).