Wie bekomme ich HTML-Inhalte von einer Webansicht?
Welche ist die einfachste Methode, um html-code aus einer webview?
Ich habe versucht mehrere Methoden, von stackoverflow und google, aber finde keine genaue Methode. Bitte geben Sie eine genaue Art und Weise.
public class htmldecoder extends Activity implements OnClickListener,TextWatcher
{
TextView txturl;
Button btgo;
WebView wvbrowser;
TextView txtcode;
ImageButton btcode;
LinearLayout llayout;
int flagbtcode;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.htmldecoder);
txturl=(TextView)findViewById(R.id.txturl);
btgo=(Button)findViewById(R.id.btgo);
btgo.setOnClickListener(this);
wvbrowser=(WebView)findViewById(R.id.wvbrowser);
wvbrowser.setWebViewClient(new HelloWebViewClient());
wvbrowser.getSettings().setJavaScriptEnabled(true);
wvbrowser.getSettings().setPluginsEnabled(true);
wvbrowser.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
wvbrowser.addJavascriptInterface(new MyJavaScriptInterface(),"HTMLOUT");
//wvbrowser.loadUrl("http://www.google.com");
wvbrowser.loadUrl("javascript:window.HTMLOUT.showHTML('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");
txtcode=(TextView)findViewById(R.id.txtcode);
txtcode.addTextChangedListener(this);
btcode=(ImageButton)findViewById(R.id.btcode);
btcode.setOnClickListener(this);
}
public void onClick(View v)
{
if(btgo==v)
{
String url=txturl.getText().toString();
if(!txturl.getText().toString().contains("http://"))
{
url="http://"+url;
}
wvbrowser.loadUrl(url);
//wvbrowser.loadData("<html><head></head><body><div style='width:100px;height:100px;border:1px red solid;'></div></body></html>","text/html","utf-8");
}
else if(btcode==v)
{
ViewGroup.LayoutParams params1=wvbrowser.getLayoutParams();
ViewGroup.LayoutParams params2=txtcode.getLayoutParams();
if(flagbtcode==1)
{
params1.height=200;
params2.height=220;
flagbtcode=0;
//txtcode.setText(wvbrowser.getContentDescription());
}
else
{
params1.height=420;
params2.height=0;
flagbtcode=1;
}
wvbrowser.setLayoutParams(params1);
txtcode.setLayoutParams(params2);
}
}
public class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
/*@Override
public void onPageFinished(WebView view, String url)
{
//This call inject JavaScript into the page which just finished loading.
wvbrowser.loadUrl("javascript:window.HTMLOUT.processHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
}*/
}
class MyJavaScriptInterface
{
@SuppressWarnings("unused")
public void showHTML(String html)
{
txtcode.setText(html);
}
}
public void afterTextChanged(Editable s) {
//TODO Auto-generated method stub
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
//TODO Auto-generated method stub
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
wvbrowser.loadData("<html><div"+txtcode.getText().toString()+"></div></html>","text/html","utf-8");
}
}
InformationsquelleAutor der Frage | 2011-11-20
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eigentlich diese Frage hat viele Antworten. Hier sind 2 davon :
Diese Weise wird Ihre schnappen Sie sich das html durch javascript. Nicht der schönste Weg, aber wenn Sie Ihre javascript-Schnittstelle, die Sie hinzufügen können andere Methoden zu basteln.
Die option, die Sie wählen, hängt auch davon ab, denke ich, auf das, was Sie beabsichtigen zu tun mit den abgerufenen html...
InformationsquelleAutor der Antwort Sephy
Für android 4.2, vergessen Sie nicht, fügen Sie @JavascriptInterface alle javasscript Funktionen
InformationsquelleAutor der Antwort user1842354
In KitKat und höher, Sie könnte verwenden
evaluateJavascript
Methode webviewSehen diese Antwort weitere Beispiele
InformationsquelleAutor der Antwort Akash Kurian Jose
Android WebView ist nur ein weiterer render-engine, die das Rendern von HTML-Inhalten Download von einem HTTP-server, ähnlich wie bei Chrome oder FireFox. Ich weiß nicht, der Grund, warum Sie brauchen, Holen Sie sich die gerenderte Seite (oder screenshot) von WebView. Für die meisten Situationen ist dies nicht notwendig. Sie können immer die roh-HTML-Inhalte von HTTP-server direkt.
Gibt es bereits Antworten gepostet reden über den raw-stream mit HttpUrlConnection oder HttpClient. Alternativ gibt es eine sehr praktische Bibliothek, die beim Umgang mit HTML-Inhalt Parsen/verarbeiten auf Android: JSoup, es eine sehr einfache API, um HTML-Inhalt-form-HTTP-server, und geben Sie eine abstrakte Darstellung des HTML-Dokuments um uns zu helfen, HTML-parsing nicht nur in einem mehr OO-Stil, sondern auch viel leichter:
Ist es praktisch, wenn, zum Beispiel, das Sie herunterladen möchten HTML-Dokument zuerst, dann fügen Sie einige benutzerdefinierte css-oder javascript, um es vor der übergabe an WebView für das rendering. Viel mehr auf der offiziellen web-Seite, die lohnt, check it out.
InformationsquelleAutor der Antwort yorkw
One-touch-point, die ich gefunden, die gestellt werden muss, ist "versteckt" Weg in die Proguard-Konfiguration. Während der HTML-reader ruft durch die javascript-Schnittstelle nur in Ordnung, wenn Sie das Debuggen der app, das funktioniert nicht mehr, sobald die app ausgeführt wurde, durch Proguard, es sei denn, die HTML-reader-Funktion ist deklariert in der Proguard config-Datei, etwa so:
Getestet und bestätigt auf Android 2.3.6, 4.1.1 und 4.2.1.
InformationsquelleAutor der Antwort user1756541
Android wird nicht lassen Sie dies tun, für Sicherheit zu sorgen. Ein böser Entwickler könnte sehr leicht zu stehlen Benutzer eingegebenen login-Informationen.
Statt, Sie haben zu fangen, der text wird angezeigt, in der Webansicht, bevor es angezeigt wird. Wenn Sie nicht möchten, richten Sie eine Antwort-handler (wie in den anderen Antworten), fand ich dieses Update mit einigen googeln:
Dies ist eine Menge code, und Sie sollten in der Lage sein, um copy/paster, und am Ende
str
enthält den gleichen html-gezeichnet in der Webansicht. Diese Antwort ist aus Einfachste Weg, um richtig laden Sie den html-von web-Seite in einen string in Java und es sollte funktionieren auf Android auch. Ich habe nicht getestet und nicht schreiben es selbst, aber es könnte Ihnen helfen.Auch die URL dieses ziehen ist hardcoded, also müssen Sie um das zu ändern.
InformationsquelleAutor der Antwort edthethird
Warum nicht Holen Sie sich die html zuerst, dann übergeben Sie es an den web-view?
Dieser sollte in etwa das tun, was Sie tun möchten. Ist es adaptiert von Ist es möglich, den HTML-code von WebView
und Schreien Sie heraus zu https://stackoverflow.com/users/325081/aymon-fournier für seine Antwort.
InformationsquelleAutor der Antwort Karl L
Ich würde vorschlagen, anstatt zu versuchen, zu extrahieren Sie den HTML-von WebView, die Sie extrahieren den HTML von der URL. Durch diese, ich meine, mit einem Drittanbieter-Bibliothek wie JSoup zu Durchlaufen, die HTML für Sie. Der folgende code wird in den HTML-von einer bestimmten URL für Sie
InformationsquelleAutor der Antwort Mimminito
versuchen Sie es mit HttpClient als Sephy sagte:
InformationsquelleAutor der Antwort Christoper Hans
Seine Einfach zu implementieren, Nur müssen, wenn javascript-Methoden in Ihre html-Wert zu erhalten von html-Inhalten.
Wie Oben dein code einige änderungen notwendig werden.
Javascript in html -
& Stellen Sie sicher, dass Sie den Aufruf callme wie unten im html -
<input name="FacadeAL" id="FacadeAL" type="text" size="5" onblur="callme()"/>
Hoffe, das wird Ihnen helfen.
InformationsquelleAutor der Antwort Mr. Sajid Shaikh
Schlage ich vor, Sie versuchen, einige Reflexion Ansatz, wenn Sie die Zeit haben, sich auf den debugger
(sorry, aber ich habe nicht).
Ausgehend von der
loadUrl()
Methode derandroid.webkit.WebView
Klasse:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/webkit/WebView.java#WebView.loadUrl%28java.lang.String%2Cjava.util.Map%29
Sollten Sie kommen auf die
android.webkit.BrowserFrame
bezeichnen dasnativeLoadUrl()
native Methode:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/webkit/BrowserFrame.java#BrowserFrame.nativeLoadUrl%28java.lang.String%2Cjava.util.Map%29
Die Implementierung der nativen Methode sollte hier sein:
http://gitorious.org/0xdroid/external_webkit/blobs/a538f34148bb04aa6ccfbb89dfd5fd784a4208b1/WebKit/android/jni/WebCoreFrameBridge.cpp
Wünschen Ihnen viel Glück!
InformationsquelleAutor der Antwort lechuckcaptain
oben angegebenen Methoden sind für wenn Sie eine web-url ,aber wenn Sie eine lokale html-dann können Sie auch html-Code dieser code
InformationsquelleAutor der Antwort