Frage

Was ist der Unterschied zwischen setWebViewClient vs. setWebChromeClient in Android?

War es hilfreich?

Lösung

Von der 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;
}

WebChromeClient ermöglicht es Ihnen, Javascript Dialoge, Favicons, Titel und den Fortschritt zu behandeln. Schauen Sie dieses Beispiel: Hinzufügen von alert () Unterstützung für eine WebView

Auf den ersten Blick gibt es zu viele Unterschiede WebViewClient & < a href = "http://developer.android.com/reference/android/webkit/WebChromeClient.html" rel = "noreferrer"> WebChromeClient . Aber im Grunde: Wenn Sie einen WebView entwickeln, die nicht zu viele Funktionen benötigen, aber die Darstellung von HTML, können Sie einfach einen WebViewClient verwenden. Auf der anderen Seite, wenn Sie (zum Beispiel) zu wollen, das Favicon der Seite laden Sie machen, sollen Sie ein WebChromeClient Objekt verwenden und die onReceivedIcon(WebView view, Bitmap icon) außer Kraft setzen.

Die meisten der Zeit, wenn Sie keine Sorge über diese Dinge wollen ... Sie können dies nur tun:

webView= (WebView) findViewById(R.id.webview); 
webView.setWebChromeClient(new WebChromeClient()); 
webView.setWebViewClient(new WebViewClient()); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.loadUrl(url); 

Und Ihre WebView wird (in der Theorie) haben alle implementierten Funktionen (wie dem Android nativen Browser).

Andere Tipps

Ich fühle mich diese Frage Notwendigkeit eines weiteren Details Bit. Meine Antwort ist aus der Android Programmierung inspiriert, der Nerd Ranch Guide (2. Auflage).

In der Standardeinstellung , ist JavaScript in WebView ab. Sie müssen nicht immer, es haben, aber für einige Anwendungen, könnte es erfordern.

hat die URL Laden nach der Konfiguration des WebView getan werden, so dass Sie das letzte tun. Davor, schalten Sie JavaScript in durch getSettings() Aufruf eine Instanz von WebSettings und ruft WebSettings.setJavaScriptEnabled(true) zu bekommen. WebSettings ist der erste der drei Möglichkeiten, wie Sie Ihren WebView ändern können. Es hat verschiedene Eigenschaften, die Sie können, wie die User-Agent-String und Textgröße eingestellt.

Danach konfigurieren Sie Ihr WebViewClient. WebViewClient ist ein Ereignis-Schnittstelle. Durch eine eigene Implementierung von WebViewClient bereitstellen, können Sie auf Rendering-Ereignisse reagieren. Zum Beispiel könnten erkennen Sie, wenn der Renderer ein Bild von einer bestimmten URL beginnt Laden oder entscheiden, ob eine POST-Anfrage an den Server erneut zu senden.

WebViewClient viele Methoden hat man außer Kraft setzen können, von denen die meisten Sie mit nicht beschäftigen. Allerdings müssen Sie den Standard WebViewClient Implementierung von shouldOverrideUrlLoading(WebView, String) ersetzen. Diese Methode bestimmt, was passieren wird, wenn eine neue URL in der WebView geladen wird, wie durch einen Link drücken. Wenn Sie true zurück, Sie sagen: „Do diese URL nicht umgehen, ich bin Umgang es selbst.“ Wenn Sie false zurück, Sie sagen: „Gehen Sie voran und diese URL laden, WebView, ich tue nichts mit ihm .“

Die Standardimplementierung feuert eine implizite Absicht mit der URL, so wie du zuvor. Nun aber wäre dies ein ernstes Problem sein. Das erste, was einige Web-Anwendungen tun, ist man auf die mobile Version der Website weitergeleitet. Mit dem Standard-WebViewClient, das bedeutet, dass Sie sofort zu dem Standard-Web-Browser des Benutzers gesendet. Dies ist genau das, was Sie versuchen zu vermeiden. Die Lösung ist einfach - nur die Standardimplementierung außer Kraft setzen und false zurück.

Verwenden WebChromeClient Dinge Fichte Da Sie sich die Zeit nehmen, um Ihre eigene WebView zu schaffen, wollen sie es auf ein bisschen Fichte durch einen Fortschrittsbalken hinzugefügt und in der Symbolleiste des Untertitel mit dem Titel der geladenen Seite zu aktualisieren.

Um die ProgressBar zu anschließen, werden Sie den zweiten Rückruf bei WebView verwenden. WebChromeClient

WebViewClient ist eine Schnittstelle für die Reaktion auf Ereignisse zu machen; WebChromeClient ist ein Ereignis, Schnittstelle, an Veranstaltungen für die Reaktion, die Elemente von Chrom um den Browser ändern sollte. Dazu gehören JavaScript Warnungen, Favicons und natürlich Updates für Ladefortschritt und den Titel der aktuellen Seite.

Haken es in onCreateView(…) auf. Mit WebChromeClient zu Fichte Dinge Fortschritte Updates und Titel-Updates jeweils ihre eigenen Callback-Methode haben, onProgressChanged(WebView, int) und onReceivedTitle(WebView, String). Die Fortschritte, die Sie von onProgressChanged(WebView, int) erhalten eine ganze Zahl von 0 bis 100. Wenn es 100 ist, Sie wissen, dass die Seite getan Laden, so dass Sie die ProgressBar, indem ihre Sichtbarkeit zu View.GONE.

verstecken
  

Hinweis: Diese Informationen aus dem Android Programmierung genommen wurden: The Big Nerd-Ranch-Führer mit Genehmigung der Autoren. Für mehr   Informationen zu diesem Buch oder eine Kopie zu kaufen, besuchen Sie bitte   bignerdranch.com.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top