2017-12-16 5 views
5

Ich habe ein Problem mit Android Web View. Wenn ich die Funktion sentOverrideUrlLoading in meiner Klasse überschreiben, die WebViewClient erweitert, gibt WebView.canGoBack() immer false zurück.webView.canGoBack() immer falsch

Unten ist mein Code

public class SMWebViewClient extends WebViewClient { 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
     view.loadUrl(request.getUrl().toString()); 
     return true; 
    } 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String uri) { 
     view.loadUrl(uri); 
     return true; 
    } 
} 

Und in der eigenen Aktivität:

@BindView(R.id.main_webview) SMWebView webView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    ... 
    webView.setWebViewClient(new SMWebViewClient(){ 
     @Override 
     public void onPageFinished(WebView view, String url){ 

     } 
    }); 
    webView.clearCache(true); 
    webView.clearHistory(); 
    webView.loadUrl(Constant.baseUrl + Constant.homeUrl); 
} 

Das Problem ist, dass die Funktion webView.canGoBack (immer in meiner Tätigkeit) gibt immer false:

@Override 
    public void onBackPressed() { 
     //ALWAYS FALSE 
     if (webView.canGoBack()) { 
      webView.goBack(); 
     } 
    } 

Wenn ich shouldOverrideUrlLoading nicht überschreibe, dann onBackPressed funktioniert wie erwartet. Was ist falsch in meinem Code?

Dank

[EDIT]: Ich habe auch versucht (ohne Erfolg) webViewClient auf diese Weise zu erstellen:

ebView.setWebViewClient(new SMWebViewClient()); 

Antwort

2

Legen Sie nicht die URL jedes Mal in der WebClient dies löscht die Vergangenheit der WebView und überprüfen Sie auch, wie Sie die WebView zu Ihrem eigenen SMWebView erweitert.

+0

Dank @Xenolion für den Vorschlag, aber nichts ändert sich falsch zurück. – fciri

+0

Aber warum möchten Sie einen Webclient einstellen? – Xenolion

+0

Denn jedes Mal, wenn Sie Ihrem Webview eine andere URL geben! – Xenolion

7

Es scheint ein Problem mit der aktuellen Version von Chrome (63+) zu geben. Ich habe Chrome Dev (65+) heruntergeladen, die Standard-Webansicht auf Chrome Dev 65+ geändert, das webview.canGoBack() funktioniert einwandfrei.

Hier einige Lesung Fehler gemeldet: https://bugs.chromium.org/p/chromium/issues/detail?id=794020

Chrome Dev Download URL: https://play.google.com/store/apps/details?id=com.chrome.dev

Standard webview ändern: https://www.chromium.org/developers/androidwebview/android-webview-beta

Sieht aus wie wir für somewhile für die neue warten müssen Chrome stabiles Update

+0

Vielen Dank @neobie, um diese Informationen zu teilen. – fciri

+0

Und hier dachte ich, ich würde verrückt werden. Danke für die Information. –