Puis-je passer un objet Javascript à une WebView Android?
Je suis la migration d'une application web dans une version pour android.
Après avoir reçu et traité les données JSON, j'ai un tableau d'objets Javascript organisé au sein de la page.
Comment puis-je passer le contenu complet de l'un des objets javascript "out" à la webview un conteneur pour l'affichage à l'aide d'android natif de contrôle ?
Finalement, j'ai pu créer un javascript interface avec une méthode ayant des paramètres pour chaque possible javascript propriétés de l'objet - mais cela ne semble pas trop lourd.
Quelqu'un peut-il aider ?
Vérifiez les réponses en fil similaire stackoverflow.com/questions/2250917/...
OriginalL'auteur Simon | 2012-04-02
Vous devez vous connecter pour publier un commentaire.
Android
WebView
contient une méthode appeléeaddJavascriptInterface(Object obj, String interfaceName)
qui devrait être utile ici.À l'aide de cette méthode, l'objet
obj
que vous ajoutez en tant que l'interface peut être consulté via du code JavaScript dans le Vue Web. Dans votre cas, vous pourriez passer dans un objet qui a une méthode de définition que les transferts JavaScript objet en Java.Vous aurez toujours besoin pour créer le code de la colle qui convertit vos JavaScript objet dans l'objet JSON. Pour une approche rapide, vous pouvez juste avoir votre interface de générer un JSONObject sur le Java côté à l'aide d'une chaîne JSON passé à partir de JavaScript. Le
JSONObject
classe en Java a un constructeur qui accepte une Chaîne de caractères contenant les données JSON. Ainsi, vous pouvez passer à la stringified résultat directement à l'arrière de Java et de créer l'objet de cette façon. Par exemple:Puis, sur le JavaScript côté, dans le gestionnaire qui a une tache de unparsed JSON dans la variable jsonData:
Maintenant, votre JSInterface sur le Java côté aura un JSONObject contenant les éléments, à laquelle vous pouvez accéder en utilisant les méthodes fournies par JSONObject. Les objets créés par l'intermédiaire de l'appel Javascript sera dans le
mObjectsFromJS
carte. Vous aurez évidemment voulez ajouter d'autres méthodes d'assistance à la JSInterface classe qui permet de gérer les objets mieux.Je n'ai pas compilé ou testé l'une de ces méthodes, de sorte que vous pouvez avoir à modifier un peu pour un bon fonctionnement. Mais j'espère que cela vous donne l'idée.
Cependant, si les objets ont une interface cohérente et éléments de données, il serait plus judicieux de créer un simple JavaScript colle fonction qui lie le JavaScript propriétés de l'objet à la Java objet côté des champs à l'aide des méthodes de définition.
VEUILLEZ NOTER
C'est donner de code à distance possibilité de déclencher du code natif sur votre appareil. Si vous n'avez pas le contrôle complet sur les pages/scripts chargés dans le
WebView
, vous devez vous assurer que le comportement exposés parobj
ne permet pas d'exploits.Après avoir essayé d'obtenir cette réponse au travail, j'ai découvert que le javascript interface est complètement cassée dans la v2.3.x de Android. De la honte.
que faire si je veux faire mon Java fonction d'un constructeur, donc je voudrais l'appeler par exemple
var ob = new Android.MyObject()
, comment pourrais-je retourner un natif objet javascript?OriginalL'auteur Jason LeBrun