Was ist der Unterschied zwischen setWebViewClient und setWebChromeClient?
Was ist der Unterschied zwischen setWebViewClient
vs. setWebChromeClient
in Android?
InformationsquelleAutor der Frage Pentium10 | 2010-05-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der Quellcode:
Mit WebChromeClient können Sie Javascript-Dialoge, favicons, Titel und den Fortschritt. Schauen Sie dieses Beispiel: Hinzufügen der alert () - Unterstützung einer WebView
Auf den ersten Blick gibt es zu viele Unterschiede WebViewClient & WebChromeClient. Aber grundsätzlich: wenn Sie die Entwicklung einer WebView, die nicht allzu viele Funktionen, aber die Darstellung von HTML, können Sie einfach eine
WebViewClient
. Auf der anderen Seite, wenn Sie möchten (zum Beispiel) laden Sie das favicon der Seite, die Sie Rendern, sollten Sie eineWebChromeClient
- Objekt und setzen dieonReceivedIcon(WebView view, Bitmap icon)
.Meisten der Zeit, wenn Sie nicht wollen, sich sorgen über diese Dinge... Sie können nur dazu:
Und deine WebView wird (in der Theorie) alle features implementiert (wie die native android-browser).
InformationsquelleAutor der Antwort Cristian
Habe ich das Gefühl diese Frage brauchen Sie ein bisschen mehr details. Meine Antwort ist inspiriert von der Android-Programmierung, Der Nerd Ranch Guide (2nd edition).
StandardmäßigJavaScript ausgeschaltet ist in WebView. Sie müssen nicht immer auf, aber für einige apps, vielleicht tun Sie es benötigen.
Laden der URL gemacht werden muss nach dem konfigurieren der Webansicht, sodass Sie tun, die letzten. Vor, dass du JavaScript aktivierst durch den Aufruf
getSettings()
um eine Instanz der WebSettings und ruftWebSettings.setJavaScriptEnabled(true)
. WebSettings ist die erste der drei Möglichkeiten, die Sie ändern können, Ihre WebView. Es hat verschiedene Eigenschaften, die Sie festlegen können, wie die user-agent-string und text-Größe.Nach, konfigurieren Sie Ihr WebViewClient. WebViewClient ist ein event-interface. Indem Sie Ihre eigene Implementierung des WebViewClient können Sie Antworten auf die Wiedergabe von Ereignissen. Sie könnten beispielsweise erkennen, wenn der renderer beginnt laden Sie ein Bild von einer bestimmten URL oder entscheiden, ob Sie erneut eine POST-Anforderung an den server.
WebViewClient hat viele Methoden, die Sie überschreiben können, von denen die meisten Sie nicht bewältigen. Allerdings müssen Sie um ersetzen Sie die Standard-WebViewClient Umsetzung von
shouldOverrideUrlLoading(WebView, String)
. Diese Methode legt fest, was passieren wird, wenn eine neue URL geladen wird, in der Webansicht, wie durch drücken auf einen link. Wenn Sie true zurück, werden Sie sagen, "nicht behandeln Sie diese URL, ich bin Fehlerbehandlung selbst." Wenn Sie false zurück, werden Sie sagen, "Go ahead, und laden Sie diese URL, WebView, ich bin nicht tun nichts mit ihm."Die default-Implementierung feuert einen impliziten intent mit der URL genauso, wie Sie es früher gemacht hat. Jetzt, obwohl, das wäre ein schwerwiegendes problem. Die erste Sache, einige Web-Anwendungen funktioniert, ist eine Umleitung auf die mobile version der website. Mit der Standard-WebViewClient, das bedeutet, dass Sie sofort an den Benutzer gesendet, die Standard-web-browser. Das ist genau das, was Sie versuchen, zu vermeiden.
Die Lösung ist einfach – nur das überschreiben der default-Implementierung aus und gibt false zurück.
Verwenden WebChromeClient, Fichte Dinge
Da Sie sich die Zeit nehmen, erstellen Sie Ihre eigenen WebView, let ' s Fichte it up ein wenig durch das hinzufügen einer Statusleiste und die Aktualisierung der toolbar Untertitel mit dem Titel der geladenen Seite.
Hook up die ProgressBar verwenden Sie den zweiten Rückruf auf WebView:
WebChromeClient
.WebViewClient ist eine Schnittstelle für die Beantwortung der Darstellung von Ereignissen; WebChromeClient ist ein Ereignis-Schnittstelle für die Reaktion auf Ereignisse, die sich ändern sollten Elemente der Chrom rund um den browser. Dieses enthält JavaScript-Warnungen, favicons, und natürlich auch updates für den Ladevorgang und den Titel der aktuellen Seite.
Haken es bis in
onCreateView(…)
. Mit WebChromeClient, Fichte Dinge obenFortschritt-updates und title updates haben jeweils Ihre eigene callback-Methode,
onProgressChanged(WebView, int)
undonReceivedTitle(WebView, String)
. Die Fortschritte, die Sie erhalten vononProgressChanged(WebView, int)
eine ganze Zahl von 0 bis 100. Wenn es 100 sind, wissen Siedass die Seite fertig ist laden, so dass Sie verstecken die ProgressBar durch festlegen seiner Sichtbarkeit
View.GONE
.InformationsquelleAutor der Antwort maytham-ɯɐɥʇʎɐɯ