2017-12-12 4 views
2

クロームバージョン61または62で正常に動作しますが、私はバージョン63にアップデートしたときに私のwebviewが履歴を保存しないとwebView.canGoBack()は常にfalseを返しwebview私のAndroidアプリ。しかし、以前のバージョンのChromeではうまく動作します。の解き方?問題更新クロームの安定版63

答えて

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; 
     } 
+0

私の場合は無限に新しいインテントを作成します。 – hQuse

2

この問題は、クロムのバグである必要があります。私たちはアプリで同じ問題を見つけました。この問題の原因は、shouldOverrideUrlLoadingメソッドでWebviewのloadUrlメソッドを呼び出すことです。そのとき、webviewはクロムのいくつかのバージョンに戻ることはできません。以下のコードは私の回避策です:

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