Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 尝试登录Facebook时显示空白白页的WebView_Android_Facebook_Android Webview - Fatal编程技术网

Android 尝试登录Facebook时显示空白白页的WebView

Android 尝试登录Facebook时显示空白白页的WebView,android,facebook,android-webview,Android,Facebook,Android Webview,我正在网络视图中加载网页。点击Facebook登录,我会看到一个空白的白屏。被调用的URL如下:https://m.facebook.com/dialog/oauth?access_token=... 以下是我的代码: onCreate(): CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true); WebSettings webSettings = wvMain

我正在网络视图中加载网页。点击Facebook登录,我会看到一个空白的白屏。被调用的URL如下:
https://m.facebook.com/dialog/oauth?access_token=...

以下是我的代码:

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

    }
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) {
    }
}
UriChromeClient

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

    }
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) {
    }
}
是我设置的
webSettings.setSupportMultipleWindows(true)
在onCreate()中,应用程序崩溃,出现以下异常: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;
    }
}

现在应用程序并没有崩溃,但同样存在白/黑屏问题。

通过将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;
    }

但成功登录后,我会看到一个空白屏幕,但这是另一天的故事。

请检查问题中关于空白屏幕的编辑,可能会看到