2017-12-12 1 views

Antwort

0

Sogar ich war mit diesem Problem konfrontiert. Vorerst können Sie in der Funktion ouldOverrideUrlLoading (WebView-Ansicht, String-URL) {} und in super.onbackpressed() die Absicht verwenden, den Verlauf zu verwalten.

+0

In meinem Fall erstellt neue Absichten endlos. – hQuse

2

Dieses Problem sollte Chroms Bug sein. Wir finden das gleiche Problem in unseren Apps. Der Grund für dieses Problem ist, dass wir in der Methode "lowUrideUrlLoading" das Webload-Verfahren "loadUrl" aufrufen. Wenn wir das tun, kann webview in einer Chromversion nicht zurückgehen. Der folgende Code ist meine Problemumgehung:

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

Das hängt damit zusammen (http://crbug.com/794020) Ich denke. Workaround funktioniert, bestätigt. Wird verwendet, um zusätzliche Header mit 'loadUrl()' hinzuzufügen. Das kann mit dieser Problemumgehung nicht getan werden. – hQuse

Verwandte Themen