Comment puis-je obtenir la page web de contenu à partir d'une WebView?
Sur Android, j'ai un WebView
qui est de l'affichage d'une page.
Comment puis-je obtenir le code source de la page, sans demande de nouveau à la page?
Il semble WebView
doivent avoir une sorte de getPageSource()
méthode qui renvoie une chaîne de caractères, mais hélas il n'en a pas.
Si je activer JavaScript, qu'est-ce que le JavaScript appropriées pour mettre dans cet appel pour obtenir le contenu?
webview.loadUrl("javascript:(function() { " +
"document.getElementsByTagName('body')[0].style.color = 'red'; " +
"})()");
- utiliser jquery script et js interface pour récupérer le contenu html de webview fenêtre.de l'interface.processHTML($(\"corps\").html());
- stackoverflow.com/questions/8200945/...
- Vous pouvez bien sûr obtenir la réponse en HTML en utilisant les Requêtes HTTP, mais si certains page nécessite l'envoi de données à charger(comme par exemple l'identification de l'utilisateur, etc), cette approche omet simplement. Je pense que c'est comment il devrait être, parce que si vous pouviez le faire, vous pouvez probablement le faire de votre propre application android pour n'importe quel site web et qui serait horrible!
Vous devez vous connecter pour publier un commentaire.
Je sais que c'est une réponse tardive, mais j'ai trouvé cette question parce que j'ai eu le même problème. Je crois que j'ai trouvé la réponse dans ce post sur lexandera.com. Le code ci-dessous est en fait un couper-coller à partir du site. Il semble faire l'affaire.
onPageFinished()
a été exécuté.browser.loadUrl
dansonPageFinished
va provoqueronPageFinished
être appelé à nouveau. Vous pourriez vouloir vérifier si c'est le premier appel deonPageFinished
ou pas avant d'appelerbrowser.loadUrl
.String html = new Scanner(new DefaultHttpClient().execute(new HttpGet("www.the url")).getEntity().getContent(), "UTF-8").useDelimiter("\\A").next();
(en abrégé pour s'adapter dans un commentaire 🙂 )MyJavaScriptInterface mji = new MyJavaScriptInterface(); mji.showHTML(html);
et de commenter tout ce qui concerne la webview (puisque je n'ai pas ce composant) mais de cette façon, je viens d'obtenir le code html sans javascript traitées... Est quelque chose qui manque?new WebView(context);
@SuppressLint("SetJavaScriptEnabled")
process the html as needed by the app
est un commentaire. Vous devez remplacer votre application du code. Je ne sais pas si je peux vous aider avec ça.Par question 12987, Blundell la réponse se bloque (au moins sur mon 2.3 VM). Au lieu de cela, j'ai intercepter un appel à la console.journal avec un préfixe spécial:
C'est une réponse basée sur jluckyiv de l',
mais je pense qu'il est préférable et plus simple de changer de Javascript comme suit.
Avez-vous envisagé de récupérer le code HTML séparément, puis de les charger dans une webview?
J'ai réussi à obtenir ce travail à l'aide du code de @jluckyiv de la réponse, mais j'ai dû ajouter dans @JavascriptInterface annotation à l'processHTML méthode dans le MyJavaScriptInterface.
Vous avez également besoin d'annoter la méthode avec @JavascriptInterface si votre targetSdkVersion est >= 17 - parce qu'il y a de nouvelles exigences en matière de sécurité dans le SDK 17, c'est à dire toutes les méthodes javascript doit être annotée avec @JavascriptInterface. Sinon, vous verrez erreur de ce type: Uncaught TypeError: Object [object object] n'a pas de méthode 'processHTML" à null:1
Si vous travaillez sur kitkat et au-dessus, vous pouvez utiliser le chrome outils de débogage à distance pour trouver toutes les demandes et les réponses vont dans et hors de votre webview et aussi le code source html de la page consultée.
https://developer.chrome.com/devtools/docs/remote-debugging