내 Android 앱 webview
은 크롬 버전 61 또는 62에서는 잘 작동하지만 버전 63으로 업데이트하면 작동합니다. 내 webview
은 기록을 저장하지 않으며 webView.canGoBack()
은 항상 false
을 반환합니다. 그러나 이전 버전의 크롬은 잘 작동합니다. 어떻게 해결할 수 있습니까?WebView Android 내역 내역 Chrome 안정 버전을 업데이트 할 때
2
A
답변
0
심지어이 문제에 직면했습니다. 지금은 ouldOverrideUrlLoading (WebView view, 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;
}
2
이 문제는 크롬의 버그입니다. 우리는 앱에서 같은 문제를 발견합니다. 이 문제의 이유는 shouldOverrideUrlLoading 메소드에서 Webview의 loadUrl 메쏘드를 호출 할 때 웹 뷰가 크롬 버전으로 돌아갈 수 없기 때문입니다. 아래 코드는 내 해결 방법입니다.
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 ;
}
}
+0
이것은 [BUG] (http://crbug.com/794020)와 관련이 있습니다. 해결 방법이 작동하고 확인되었습니다. 'loadUrl()'과 함께 추가 헤더를 추가하는 데 사용됩니다. 이 대안으로 해결할 수 없습니다. – hQuse
제 경우에는 끝없이 새로운 의도를 만듭니다. – hQuse