安卓 - WebView的canGoBack()方法总是返回false?

3
为什么WebView canGoBack()总是返回false?
if (myWebView.canGoBack()) 
       { myWebView.goBack(); } //always false

onCreate:

        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        webSettings.setBuiltInZoomControls(true);
        myWebView.loadUrl( getString(R.string.base_url) );
        myWebView.setWebViewClient(new MyWebViewClient(progress));

MyWebviewClient:
public class MyWebViewClient extends WebViewClient {
    private ProgressBar progressBar;

    public MyWebViewClient(ProgressBar progressBar) {
        this.progressBar=progressBar;
        progressBar.setVisibility(View.VISIBLE);
    }

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        progressBar.setVisibility(View.VISIBLE);
        share_btn.setVisibility(View.GONE);
        back_btn.setVisibility(View.GONE);
        super.onPageStarted(view, url, favicon);
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        // TODO Auto-generated method stub
        progressBar.setVisibility(View.GONE);
        //hide loading image
        findViewById(R.id.imageLogo).setVisibility(View.GONE);
        //show webview
        findViewById(R.id.websiteView).setVisibility(View.VISIBLE);
        toolbar.setVisibility(View.VISIBLE);
        currentURL = url.replace("mapp.","");
        if(url.contains("article")) {
            share_btn.setVisibility(View.VISIBLE);
            back_btn.setVisibility(View.VISIBLE);
        }
    }

    @SuppressWarnings("deprecation")
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (!Global.IsInternetConnected(MainActivity.this))
            Toast.makeText(getApplicationContext(), "No internet connection!", Toast.LENGTH_SHORT).show();
        else
            view.loadUrl(url);
        return true;
    }

    @TargetApi(Build.VERSION_CODES.N)
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        if (!Global.IsInternetConnected(MainActivity.this))
            Toast.makeText(getApplicationContext(), "No internet connection!", Toast.LENGTH_SHORT).show();
        else {
            view.loadUrl(request.getUrl().toString());
        }
        return true;
    }
}

在模拟器pixel_XL_API_25上运行良好,但在Samsung S6Note3上均无法正常工作。


为什么你认为它不应该返回false - M. Prokhorov
在我的手机上使用 Toast.makeText - Mohamed Mosaed
这并不是WebView方法应该返回特定内容的原因。 - M. Prokhorov
1个回答

1

最后我找到了解决方案,问题出在shouldOverrideUrlLoading函数中。

请参考下面正确的shouldOverrideUrlLoading函数:

@SuppressWarnings("deprecation")
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (!Global.IsInternetConnected(MainActivity.this)) {
            Toast.makeText(getApplicationContext(), "No internet connection!", Toast.LENGTH_SHORT).show();
            return true;
        }
        else
            return super.shouldOverrideUrlLoading(view, url);
    }

    @TargetApi(Build.VERSION_CODES.N)
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        if (!Global.IsInternetConnected(MainActivity.this)) {
            Toast.makeText(getApplicationContext(), "No internet connection!", Toast.LENGTH_SHORT).show();
            return true;
        }
        else 
            return super.shouldOverrideUrlLoading(view, request);
    }

太顺利了!谢谢。 - Taslim Oseni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接