Android的webviewclient onPageFinished()未在某些页面上触发。

时间:2015-01-08 15:26:55

标签: android webview webviewclient webchromeclient

在我的Android应用程序中,一个Web视图包装了一个移动网站。当用户浏览移动网站时,我想显示/隐藏后退和/或前进箭头以帮助他/她导航。要确定show hide back and forward箭头,我在webviewClient的onPageFinished()中检查webview canGoBack()和canGoForward()(参见下面的代码)。以下是问题所在。

导航序列 - 第1页,第2页和第3页。 OnPageFinished()仅在Page1上触发,而不是Page2和Page3。

我还尝试将WebChromeClient添加到webview并捕获onProgressChanged(),但onProgressChanged仅在Page1和Page3上触发。

因此,我只能在第3页而不是Page2上显示后退箭头。在Page3上,当在Page2上点击onPageFinished()后向箭头时。

我无法访问移动网络,无法在移动网络上获得任何帮助。基于查看html的源代码,我发现在Page1上单击了一个超链接以进入Page2。

我的问题是为什么Page2和Page3上的onProgessChanged()在按Page1,Page2和Page3的顺序导航时没有触发,但是在退出时onProgressChange()在Page2上触发。

您的任何帮助将受到高度赞赏。如果您需要更多细节,请告诉我。

@覆盖     protected void onCreate(Bundle savedInstanceState){

    ...
    wv = (WebView) findViewById(R.id.webView);
    wv.getSettings().setJavaScriptEnabled(true);
    wv.setWebViewClient(new WebViewHandler());
    wv.setWebChromeClient(new WebChromeHandler()); 
    wv.loadUrl(urlPassedIn);
    ...

}

private class WebViewHandler extends WebViewClient {

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        int visible = wv.canGoBack() ? View.VISIBLE : View.INVISIBLE;
        navBack.setVisibility(visible);
        visible = wv.canGoForward() ? View.VISIBLE : View.INVISIBLE;
        navForward.setVisibility(visible);
    }


    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return false;
    }

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        // TODO Auto-generated method stub
        super.onPageStarted(view, url, favicon);
    }

    @Override
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        super.onReceivedError(view, errorCode, description, failingUrl);
    }

}

private class WebChromeHandler extends WebChromeClient
{
    @Override
    public void onProgressChanged(android.webkit.WebView view, int newProgress)
    {
        super.onProgressChanged(view, newProgress);

        if(newProgress == 100)
        {
           //inject java code here
            int visible = wv.canGoBack()? View.VISIBLE: View.INVISIBLE;
            navBack.setVisibility(visible);
            visible = wv.canGoForward()? View.VISIBLE: View.INVISIBLE;
            navForward.setVisibility(visible);
            wv.loadUrl("javascript:( function () { var resultSrc = (document.querySelector('#content .product-detail') !=null); window.callout.directionCallback(resultSrc); } ) ()");
        }
    }

}

0 个答案:

没有答案