Antworten:
Aus dem Quellcode :
// Instance of WebViewClient that is the client callback.
private volatile WebViewClient mWebViewClient;
// Instance of WebChromeClient for handling all chrome functions.
private volatile WebChromeClient mWebChromeClient;
// SOME OTHER SUTFFF.......
/**
* Set the WebViewClient.
* @param client An implementation of WebViewClient.
*/
public void setWebViewClient(WebViewClient client) {
mWebViewClient = client;
}
/**
* Set the WebChromeClient.
* @param client An implementation of WebChromeClient.
*/
public void setWebChromeClient(WebChromeClient client) {
mWebChromeClient = client;
}
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 ein WebChromeClient
Objekt verwenden und das überschreiben onReceivedIcon(WebView view, Bitmap icon)
.
Wenn Sie sich über diese Dinge keine Sorgen machen möchten, können Sie dies meistens einfach tun:
webView= (WebView) findViewById(R.id.webview);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(url);
Und in Ihrem WebView werden (theoretisch) alle Funktionen implementiert (als nativer Android-Browser).
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 aufrufen WebSettings.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)
und onReceivedTitle(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 einstellen View.GONE
.
Haftungsausschluss: Diese Informationen stammen aus der Android-Programmierung: The Big Nerd Ranch Guide mit Genehmigung der Autoren. Für weitere Informationen zu diesem Buch oder um eine Kopie zu erwerben, besuchen Sie bitte bignerdranch.com.