Was ist der Unterschied zwischen setWebViewClient
und setWebChromeClient
in Android?
android
webviewclient
webchromeclient
Pentium10
quelle
quelle
Antworten:
Aus dem Quellcode :
Mit WebChromeClient können Sie Javascript-Dialoge, Favoriten, Titel und den Fortschritt verarbeiten. Schauen Sie sich dieses Beispiel an: Hinzufügen der Unterstützung von alert () zu einer WebView
Auf den ersten Blick gibt es zu viele Unterschiede zwischen WebViewClient und WebChromeClient . Aber im Grunde genommen: Wenn Sie eine WebView entwickeln, die nicht zu viele Funktionen erfordert, sondern HTML rendert, können Sie einfach a verwenden
WebViewClient
. Wenn Sie jedoch (zum Beispiel) das Favicon der Seite laden möchten, die Sie rendern, sollten Sie einWebChromeClient
Objekt verwenden und das überschreibenonReceivedIcon(WebView view, Bitmap icon)
.Wenn Sie sich über diese Dinge keine Sorgen machen möchten, können Sie dies meistens einfach tun:
Und in Ihrem WebView werden (theoretisch) alle Funktionen implementiert (als nativer Android-Browser).
quelle
Ich denke, diese Frage braucht ein bisschen mehr Details. Meine Antwort ist inspiriert von der Android-Programmierung, The Nerd Ranch Guide (2. Ausgabe).
Standardmäßig ist JavaScript in WebView deaktiviert. Sie müssen es nicht immer aktiviert haben, aber für einige Apps ist es möglicherweise erforderlich.
Das Laden der URL muss nach der Konfiguration von WebView erfolgen, damit Sie dies zuletzt tun können. Zuvor
getSettings()
aktivieren Sie JavaScript, indem Sie aufrufen , um eine Instanz von WebSettings abzurufen, und aufrufenWebSettings.setJavaScriptEnabled(true)
. WebSettings ist die erste der drei Möglichkeiten, wie Sie Ihre WebView ändern können. Es verfügt über verschiedene Eigenschaften, die Sie festlegen können, z. B. die Zeichenfolge des Benutzeragenten und die Textgröße.Danach konfigurieren Sie Ihren WebViewClient. WebViewClient ist eine Ereignisschnittstelle. Indem Sie Ihre eigene Implementierung von WebViewClient bereitstellen, können Sie auf Rendering-Ereignisse reagieren. Sie können beispielsweise erkennen, wann der Renderer ein Bild von einer bestimmten URL lädt, oder entscheiden, ob eine POST-Anforderung erneut an den Server gesendet werden soll.
WebViewClient verfügt über viele Methoden, die Sie überschreiben können. Die meisten davon werden Sie nicht behandeln. Sie müssen jedoch die Standardimplementierung von WebViewClient ersetzen
shouldOverrideUrlLoading(WebView, String)
. Diese Methode bestimmt, was passiert, wenn eine neue URL in die WebView geladen wird, beispielsweise durch Drücken eines Links. Wenn Sie true zurückgeben, sagen Sie: "Behandeln Sie diese URL nicht, ich verarbeite sie selbst." Wenn Sie false zurückgeben, sagen Sie: "Laden Sie diese URL, WebView, ich mache nichts damit."Die Standardimplementierung löst wie zuvor eine implizite Absicht mit der URL aus. Dies wäre jedoch ein ernstes Problem. Einige Webanwendungen leiten Sie zunächst zur mobilen Version der Website weiter. Mit dem Standard-WebViewClient bedeutet dies, dass Sie sofort an den Standard-Webbrowser des Benutzers gesendet werden. Dies ist genau das, was Sie vermeiden wollen. Das Update ist einfach: Überschreiben Sie einfach die Standardimplementierung und geben Sie false zurück.
Verwenden Sie WebChromeClient, um die Dinge aufzufrischen. Da Sie sich die Zeit nehmen, Ihre eigene WebView zu erstellen, können Sie sie ein wenig aufpeppen, indem Sie einen Fortschrittsbalken hinzufügen und den Untertitel der Symbolleiste mit dem Titel der geladenen Seite aktualisieren.
Um die ProgressBar anzuschließen, verwenden Sie den zweiten Rückruf in WebView :
WebChromeClient
.WebViewClient ist eine Schnittstelle zum Reagieren auf Rendering-Ereignisse. WebChromeClient ist eine Ereignisschnittstelle zum Reagieren auf Ereignisse, die Chrome-Elemente im Browser ändern sollen. Dies umfasst JavaScript-Warnungen, Favoriten und natürlich Aktualisierungen zum Laden des Fortschritts und den Titel der aktuellen Seite.
Schließen Sie es an
onCreateView(…)
. Mit WebChromeClient zu Fichte Dinge Fortschritt Updates und Titel aktualisiert jeweils ihre eigene Callback - Methode hat,onProgressChanged(WebView, int)
undonReceivedTitle(WebView, String)
. Der Fortschritt, von dem Sie erhalten,onProgressChanged(WebView, int)
ist eine Ganzzahl von 0 bis 100. Wenn es 100 ist, wissen Sie, dass das Laden der Seite abgeschlossen ist. Sie verbergen die ProgressBar, indem Sie ihre Sichtbarkeit auf einstellenView.GONE
.quelle