2017-12-16 89 views
5

Tôi gặp sự cố với Android Web View. Khi tôi ghi đè hàm nênOverrideUrlLoading trong lớp của tôi mở rộng WebViewClient thì WebView.canGoBack() trả về luôn false.webView.canGoBack() luôn sai

Dưới đây là mã của tôi

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

Và trong hoạt động của tôi:

@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); 
} 

Vấn đề là các chức năng webView.canGoBack (luôn luôn trong hoạt động của tôi) trả luôn false:

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

Nếu tôi không ghi đè lên shouldOverrideUrlLoading, hơn onBackPressed hoạt động như mong đợi. Có gì sai trong mã của tôi?

Cảm ơn

[EDIT]: Tôi cũng đã cố gắng (nhưng không thành công) để tạo webViewClient theo cách này:

ebView.setWebViewClient(new SMWebViewClient()); 

Trả lời

2

Đừng nạp mọi url trong WebClient này xóa lịch sử quá khứ của số WebView và cũng kiểm tra cách bạn mở rộng WebView thành SMWebView của riêng bạn.

+0

Cảm ơn @Xenolion vì đề xuất nhưng không có thay đổi nào trả về sai. – fciri

+0

Nhưng tại sao bạn muốn đặt webclient? – Xenolion

+0

Bởi vì mỗi lần bạn cung cấp cho webview một url khác! – Xenolion

7

Có vẻ như đã xảy ra sự cố với bản phát hành Chrome hiện tại (63+). Tôi đã tải xuống Chrome Dev (65+), thay đổi chế độ xem web mặc định thành Chrome Dev 65+, webview.canGoBack() hoạt động tốt.

Dưới đây là một số đọc lỗi báo cáo: https://bugs.chromium.org/p/chromium/issues/detail?id=794020

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

Thay đổi webview mặc định: https://www.chromium.org/developers/androidwebview/android-webview-beta

Hình như chúng ta cần phải chờ đợi cho somewhile cho cái mới Chrome cập nhật ổn định.

+0

Cảm ơn bạn @neobie để chia sẻ thông tin này. – fciri

+0

Và ở đây tôi nghĩ rằng tôi đã phát điên. Cảm ơn vì thông tin. –

Các vấn đề liên quan