est-il possible d'accéder aux données de formulaire HTML postées via une WebView?
J'ai commencé à écrire une application qui fournit à l'utilisateur un formulaire HTML via une WebView. Tant que le formulaire n'est pas sous mon contrôle, les données remplis peuvent être envoyés comme requête GET ou POST. Mon application est nécessaire pour la capture de transporter des données d'un formulaire, c'est, obtenir une emprise sur ce qui a été entré dans les champs du formulaire.
Utilisation adéquate de rappel de WebViewClient comme onPageLoaded()
il est facile de saisir des données de formulaire à partir d'une requête GET. Cependant, je ne trouve aucune méthode appropriée pour permettre le même pour les données Postées, c'est à dire, être en mesure d'accéder à HTTP POST le corps du message contenant les données du formulaire. Ai-je raté une pertinente de rappel ici ou est-il tout simplement pas de moyen d'atteindre le but spécifié dans l'API (même le dernier niveau 8)?
En supposant qu'il n'était pas possible, j'ai envisagé le remplacement et l'extension de pièces de android.webkit, afin d'introduire un nouveau rappel de crochet qui est passé le POST du corps en quelque sorte. De cette façon, mon application peut être livré avec un navigateur personnalisé/WebViewClient qui remplit la fonction de votre choix. Cependant, je ne pouvais pas trouver une bonne place pour commencer dans le code et serait heureux pour tous les conseils sur ce point (dans le cas de l'approche semble prometteuse à tous).
Merci d'avance!
source d'informationauteur Timo Reimann
Vous devez vous connecter pour publier un commentaire.
Comme indiqué dans mon propre commentaire à la question d'origine, le JavaScript injection approche fonctionne. Fondamentalement, ce que vous devez faire est d'ajouter un morceau de code JavaScript dans les DOM événement onsubmit, analyser les champs du formulaire, et de retourner le résultat en Java-inscrit fonction.
Exemple de Code:
De manière informelle, ce qui n'est d'injecter du code JavaScript personnalisé (comme un
onsubmit
gestionnaire) chaque fois qu'une page ait fini de charger. Lors de la soumission d'un formulaire, Javascript va analyser les données d'un formulaire et de passer à Java terre par l'intermédiaire deJavaScriptInterface
objet.Pour analyser les champs de formulaire, le code Javascript ajoute formulaire
onsubmit
et boutononclick
gestionnaires. L'ancien peut gérer forme canonique par le biais de présentations régulières bouton soumettre, tandis que le second traite de la coutume boutons de soumission, c'est à dire, des boutons qui faire un peu plus d'Javascript magie avant d'appelerform.submit()
.S'il vous plaît être conscient que le code Javascript ne peut pas être parfait: Il pourrait y avoir d'autres méthodes pour soumettre un formulaire que mon code injecté peut ne pas être en mesure de les rattraper. Cependant, je suis convaincu que le code injecté peut être mis à jour pour faire face à de telles possibilités.
Fournis en réponse donne une erreur j'ai donc décidé de faire une simple mise en œuvre qui a également présenté bien structuré JavaScript (sens JS est dans un fichier):
Dans votre dossier des actifs, créez un fichier appelé inject.js avec le code suivant à l'intérieur:
C'est le code javascript, nous allons l'utiliser pour les injections, vous pouvez changez le si les déclarations que vous voyez l'ajustement et l'utilisation des types plutôt que des noms.La fonction de rappel pour Android est cette ligne:
window.AndroidInterface.processHTML(str);
Puis votre Activité/fragment devrait ressembler à ceci: