我的Android应用webview
适用于Chrome版本61或62,但是当我更新到版本63时。我的webview
不存储历史记录,而webView.canGoBack()
始终返回{{1 }}。但以前版本的chrome工作得很好。怎么解决?
答案 0 :(得分:2)
这个问题应该是铬的错误。我们在应用中发现了同样的问题。这个问题的原因是我们在shouldOverrideUrlLoading方法中调用Webview的loadUrl方法,当我们这样做时,webview无法返回某些版本的chrome。下面的代码是我的解决方法:
public class WebViewBugFixDemo extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// todo : set your content layout
final WebView webView = (WebView) findViewById(R.id.webview);
final String indexUrl = "http://www.yourhost.com";
final String indexHost = Uri.parse(indexUrl).getHost();
webView.loadUrl(indexUrl);
webView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (isSameWithIndexHost(url, indexHost)) {
return false;
}
view.loadUrl(url);
return true;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && request != null && request.getUrl() != null) {
String url = request.getUrl().toString();
if (isSameWithIndexHost(url, indexHost)) {
return false;
}
view.loadUrl(url);
return true;
}
return super.shouldOverrideUrlLoading(view, request);
}
});
}
/**
* if the loadUrl's host is same with your index page's host, DON'T LOAD THE URL YOURSELF !
* @param loadUrl the new url to be loaded
* @param indexHost Index page's host
* @return
*/
private boolean isSameWithIndexHost(String loadUrl, String indexHost) {
if (TextUtils.isEmpty(loadUrl)) {
return false ;
}
Uri uri = Uri.parse(loadUrl) ;
Log.e("", "### uri " + uri) ;
return uri != null && !TextUtils.isEmpty(uri.getHost()) ? uri.getHost().equalsIgnoreCase(indexHost) : false ;
}
}
答案 1 :(得分:0)
即使我正面临这个问题。现在,您可以在ouldOverrideUrlLoading(WebView视图,String url){}函数中使用intent,而super.onbackpressed()将完成其工作以维护历史记录。
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Intent intent = new Intent(MainActivity.this, MainActivity.class);
intent.putExtra("postUrl", url);
startActivity(intent);
return true;
}