2016-02-03 103 views
1

我正在WebView中加載網頁。點擊通過Facebook登錄後,我變得空白的白屏。這是越來越稱爲URL是這樣的:https://m.facebook.com/dialog/oauth?access_token=...WebView在嘗試Facebook登錄時顯示空白頁面

這裏是我的一段代碼:

的onCreate():

CookieManager cookieManager = CookieManager.getInstance(); 
cookieManager.setAcceptCookie(true); 
WebSettings webSettings = wvMain.getSettings(); 
webSettings.setJavaScriptEnabled(true); 
webSettings.setAppCacheEnabled(true); 
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); 
//webSettings.setSupportMultipleWindows(true); 
wvMain.setWebChromeClient(new UriChromeClient()); 
wvMain.setWebViewClient(new UriWebViewClient()); 
wvMain.loadUrl(myUrl); 

UriWebViewClient

private class UriWebViewClient extends WebViewClient { 

     @Override 
     public void onReceivedError(WebView view, int errorCode, 
       String description, String failingUrl) { 
      super.onReceivedError(view, errorCode, description, failingUrl); 
      wvMain.loadUrl(lastUrl); 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
      lastUrl = url; 
     } 

     @Override 
     public void onReceivedSslError(WebView view, SslErrorHandler handler, 
       SslError error) { 
      super.onReceivedSslError(view, handler, error); 
     } 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      try { 
       if (url.startsWith("http:") || url.startsWith("https:")) { 
        return false; 
       } 

     else if (url.startsWith("tel:")) { 
        //do something 
        return true; 
       } else if (url.startsWith("mailto:")) { 
        //do something 
        return true; 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return true; 
     } 

    } 

UriChromeClient

class UriChromeClient extends WebChromeClient { 

    @Override 
    public boolean onCreateWindow(WebView view, boolean isDialog, 
      boolean isUserGesture, Message resultMsg) { 
     WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; 
     transport.setWebView(wvMain); 
     resultMsg.sendToTarget(); 

     return true; 
    } 

    @Override 
    public void onCloseWindow(WebView window) { 
    } 
} 

是我的onCreate設置webSettings.setSupportMultipleWindows(true);(),應用程序崩潰與以下異常:拋出:IllegalArgumentException:家長的WebView無法承載它自己的彈出窗口。請使用WebSettings.setSupportMultipleWindows(false)

任何幫助表示讚賞。我從很多日子就陷入了這個問題。

編輯:基於在評論鏈接的問題 ,我改變了我的onCreateWindow如下:

class UriChromeClient extends WebChromeClient { 

    @Override 
    public boolean onCreateWindow(WebView view, boolean isDialog, 
      boolean isUserGesture, Message resultMsg) { 
     WebView wvMain = new WebView(mContext); 
     wvMain.setVerticalScrollBarEnabled(false); 
     wvMain.setHorizontalScrollBarEnabled(false); 
     wvMain.setWebViewClient(new UriWebViewClient()); 
     WebSettings webSettings = wvMain.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setAppCacheEnabled(true); 
     webSettings.setJavaScriptCanOpenWindowsAutomatically(true); 
     webSettings.setSupportMultipleWindows(true); 
     wvMain.setLayoutParams(new FrameLayout.LayoutParams(
       ViewGroup.LayoutParams.MATCH_PARENT, 
       ViewGroup.LayoutParams.MATCH_PARENT)); 
     mContainer.addView(wvMain); 
     WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; 
     transport.setWebView(wvMain); 
     resultMsg.sendToTarget(); 

     return true; 
    } 
} 

現在的應用程序不會崩潰,但同樣的白色/白屏的問題是存在的。

+0

[http://stackoverflow.com/questions/7485850/how-to-handle-facebook-like-with-confirm-in-android-webview](http://stackoverflow.com/questions/7485850/how -to-handle-facebook-like-with-confirm-in-android-webview) –

+0

請檢查編輯的問題 – GAMA

回答

1

通過改變onCreateWindow下面,我終於拿到了登陸界面:

@Override 
    public boolean onCreateWindow(WebView view, boolean isDialog, 
      boolean isUserGesture, Message resultMsg) { 
     wvMain.setVisibility(View.GONE); 
     CookieManager cookieManager = CookieManager.getInstance(); 
     cookieManager.setAcceptCookie(true); 
     WebView wvNew = new WebView(mContext); 
     wvNew.setVerticalScrollBarEnabled(false); 
     wvNew.setHorizontalScrollBarEnabled(false); 
     wvNew.setWebViewClient(new UriWebViewClient()); 
     WebSettings webSettings = wvNew.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setAppCacheEnabled(true); 
     webSettings.setJavaScriptCanOpenWindowsAutomatically(true); 
     webSettings.setSupportMultipleWindows(true); 
     wvNew.setLayoutParams(new FrameLayout.LayoutParams(
       ViewGroup.LayoutParams.MATCH_PARENT, 
       ViewGroup.LayoutParams.MATCH_PARENT)); 
     mContainer.addView(wvNew); 
     WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; 
     transport.setWebView(wvNew); 
     resultMsg.sendToTarget(); 

     return true; 
    } 

但成功登錄後,我得到了一個空白頁面,但是那是另一天的故事。

+0

有關空白屏幕,可能會看到https://stackoverflow.com/questions/12648099/making-facebook-login - 工作與 - 的 - Android的WebView中 – rogerdpack