在我的 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); } ) ()");
}
}
}