4

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

导航顺序 - Page1、Page2 和 Page3。OnPageFinished() 仅在 Page1 上触发,而不在 Page2 和 Page3 上触发。

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

结果,我只能在 page3 而不是 Page2 上显示返回箭头。在 Page3 上,当在 Page2 上单击后退箭头时 onPageFinished() 被触发。

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

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

您的任何帮助将不胜感激。如果您需要更多详细信息,请告诉我。

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

}

4

0 回答 0