2017-12-12 4 views

답변

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 메쏘드를 호출 할 때 웹 뷰가 크롬 버전으로 돌아갈 수 없기 때문입니다. 아래 코드는 내 해결 방법입니다.

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