1

我正在开发一个新的 android 应用程序,并使用 webview 在一个网站页面中查看我的网站,其中有一个用于登录 facebook 的链接

  • 直接登录后,返回一个空白的 embty webview
  • 我在这里看到了几个关于同一问题的主题,但它与我的不完全一样请注意,如果我使用的是普通桌面浏览器,则问题不存在

我假设应该调整 webview 的一个属性,在我的 webview 代码下面

webView1=(WebView)findViewById(R.id.webView1); 
webView1.setWebViewClient(new MyWebViewClient()); 
WebView webView1 = (WebView) findViewById(R.id.webView1);
webView1.setWebChromeClient(new WebChromeClient());
webView1.getSettings().setAppCacheEnabled(true);
webView1.getSettings().setDatabaseEnabled(true);
webView1.getSettings().setDomStorageEnabled(true);
webView1.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView1.getSettings().setGeolocationEnabled(true);           
webView1.loadUrl("http://www.myactivepoint.com/mobile/maplp.asp"); 

我真的很感谢你的支持

4

2 回答 2

1

这是我的解决方案。成功登录后,您必须重定向页面。您可以从Facebook URL 中的refsrc参数获取地址,但有时(例如下次尝试登录)缺少 refsrc,因此我使用参数。如果需要,您可以覆盖 URL 地址。见代码:

webView.setWebViewClient(new WebViewClient()
{
    @Override
    public void onPageFinished(final WebView view, final String url)
    {
        if(getActivity()!=null)
        {
            if(url.contains("facebook.com") && url.contains("dialog/oauth") &&
                (url.contains("&refsrc") || url.contains("&domain")))
            {
                Uri uri = Uri.parse(url);
                String callbackUrl = uri.getQueryParameter("refsrc");
                if(callbackUrl==null)
                    callbackUrl = "http://" + uri.getQueryParameter("domain");
                view.loadUrl(callbackUrl); // callback URL
            }
        }
    }
}
于 2015-01-14T09:58:42.470 回答
1

我和你有过类似的经历。我通过以下方法解决了这个问题。

public class CustomWebViewClient extends WebViewClient{      
    @Override
    public void onPageFinished(WebView view, String url) {

        if(url.startsWith("https://m.facebook.com/dialog/oauth")){
           String redirectUrl = "http://www.mydomain.com/myReturnUrl";
            view.loadUrl(redirectUrl);
           return;
       }
        super.onPageFinished(view, url);
    }}

并将其添加到您的 WebView

webview.setWebViewClient(new CustomWebViewClient());
于 2013-08-20T10:58:41.050 回答