Unter Android habe ich eine WebView
, die eine Seite anzeigt.
Wie erhalte ich die Seitenquelle, ohne die Seite erneut anzufordern?
Es scheint , WebView
sollte eine Art hat getPageSource()
Methode , die einen String zurückgibt, aber leider nicht.
Wenn ich JavaScript aktiviere, welches JavaScript ist für diesen Aufruf geeignet, um den Inhalt abzurufen?
webview.loadUrl("javascript:(function() { " +
"document.getElementsByTagName('body')[0].style.color = 'red'; " +
"})()");
android
android-webview
gregm
quelle
quelle
Antworten:
Ich weiß, dass dies eine späte Antwort ist, aber ich habe diese Frage gefunden, weil ich das gleiche Problem hatte. Ich glaube, ich habe die Antwort in diesem Beitrag auf lexandera.com gefunden. Der folgende Code ist im Grunde ein Ausschneiden und Einfügen von der Site. Es scheint den Trick zu tun.
quelle
onPageFinished()
ausgeführt wurde.browser.loadUrl
inonPageFinished
verursachtonPageFinished
wieder aufgerufen werden. Möglicherweise möchten Sie vor dem Anruf überprüfen, ob es sich um den ersten Anruf handeltonPageFinished
oder nichtbrowser.loadUrl
.String html = new Scanner(new DefaultHttpClient().execute(new HttpGet("www.the url")).getEntity().getContent(), "UTF-8").useDelimiter("\\A").next();
(abgekürzt, um in einen Kommentar zu passen :-))Pro Ausgabe 12.987 , stürzt Blundell Antwort (zumindest auf meinem 2.3 VM). Stattdessen fange ich einen Aufruf von console.log mit einem speziellen Präfix ab:
quelle
Dies ist eine Antwort, die auf jluckyivs basiert , aber ich denke, es ist besser und einfacher, Javascript wie folgt zu ändern.
quelle
Haben Sie darüber nachgedacht, den HTML-Code separat abzurufen und dann in eine Webansicht zu laden?
quelle
Ich habe es geschafft, dies mit dem Code aus @ jluckyivs Antwort zum Laufen zu bringen, aber ich musste der processHTML-Methode im MyJavaScriptInterface eine Annotation @JavascriptInterface hinzufügen.
quelle
Sie müssen die Methode auch mit @JavascriptInterface mit Anmerkungen versehen, wenn Ihre targetSdkVersion> = 17 ist. Da SDK 17 neue Sicherheitsanforderungen enthält, müssen alle Javascript-Methoden mit @JavascriptInterface mit Anmerkungen versehen werden. Andernfalls wird der folgende Fehler angezeigt: Nicht erfasster Typ Fehler: Objekt [Objekt Objekt] hat keine Methode 'processHTML' bei null: 1
quelle
Wenn Sie an Kitkat und höher arbeiten, können Sie die Chrome-Remote-Debugging-Tools verwenden, um alle Anforderungen und Antworten zu finden, die in Ihrer Webansicht ein- und ausgehen, sowie den HTML-Quellcode der angezeigten Seite.
https://developer.chrome.com/devtools/docs/remote-debugging
quelle