简体   繁体   English

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

[英]WebView showing blank white page when trying Facebook login

I'm loading a webpage in a WebView. 我正在WebView中加载网页。 On clicking login through Facebook, I'm getting blank white screen. 在通过Facebook单击登录时,出现空白屏幕。 URL which is getting called is something like this: https://m.facebook.com/dialog/oauth?access_token=... 被调用的URL是这样的: https://m.facebook.com/dialog/oauth?access_token=...

Here's my piece of code: 这是我的代码:

onCreate(): 的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 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 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) {
    }
}

Is I set webSettings.setSupportMultipleWindows(true); 我是否设置了webSettings.setSupportMultipleWindows(true); in onCreate(), app crashes with following exception: IllegalArgumentException: Parent WebView cannot host it's own popup window. 在onCreate()中,应用程序崩溃,但发生以下异常: IllegalArgumentException:父WebView无法承载其自己的弹出窗口。 Please use WebSettings.setSupportMultipleWindows(false) 请使用WebSettings.setSupportMultipleWindows(false)

Any help appreciated. 任何帮助表示赞赏。 I'm stuck on this from many days. 从很多天开始我就一直坚持下去。

EDIT: Based on linked question in comment, I changed my onCreateWindow as follows: 编辑:基于注释中的链接的问题,我如下更改了我的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;
    }
}

Now app doesn't crash, but same white/blank screen issue is there. 现在,应用程序不会崩溃,但是存在相同的白屏/黑屏问题。

by changing onCreateWindow to below, I finally got login screen: 通过将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;
    }

But after successful login, I'm getting a blank screen but that's story for another day. 但是,成功登录后,我得到了一个空白屏幕,但这是另一天的故事。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM