2

我在 myActivity 中使用 WebView 创建 android 应用程序。

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

  // before setContentView
  CookieSyncManager.createInstance( this);
  CookieSyncManager.getInstance().startSync();
  CookieManager.getInstance().removeAllCookie();
  CookieManager.getInstance().setAcceptCookie( true);

  setContentView( R.layout.browser);

      webviewHTML = (WebView) findViewById( R.id.webviewHTML);
      WebSettings webSettings = webviewHTML.getSettings();
      webSettings.setSupportZoom( true);
      webSettings.setBuiltInZoomControls( true);
      webSettings.setJavaScriptEnabled( true);
      webSettings.setJavaScriptCanOpenWindowsAutomatically( true);
      webSettings.setAppCacheEnabled( false);
      webSettings.setSaveFormData( false);
      webSettings.setSavePassword( false);
      webSettings.setDefaultTextEncodingName( "utf-8");
      webSettings.setDomStorageEnabled( true);
      webSettings.setUserAgent( 0);
      webviewHTML.setWebViewClient( new myWebViewClient());
      webviewHTML.addJavascriptInterface( new myJavaScriptInterface(), getString( R.string.sAppName));
      webviewHTML.setOnLongClickListener( onWebViewLongClickListener);

      webviewHTML.loadUrl( "myaddress");
}

创建 WebView 时,我打开公司 Microsoft Exchange 2010 OWA ' https://mail.mydomain.com/owa/ '的页面:

在此处输入图像描述

然后我从我的域中手动输入用户名和密码。但我在 WebView 中收到错误消息页面(响应代码 200):

<head><head></head><body>Bad Request</body></head>

截屏:

在此处输入图像描述

但是,当我在任何浏览器(Chrome)中打开此页面时,我会更正进入 OWA 邮件页面: 在此处输入图像描述

为什么 Exchange 服务器在正文中返回带有错误的 html 页面?

我需要向 WebView 属性添加什么?

添加: 此外,当我在 PC 窗口的桌面浏览器中打开此页面以在浏览器(非站点)内弹出用户名和密码时:

在此处输入图像描述

添加解决方案我发现我的错误。我检查了 WebView.myWebViewClient.onPageFinish 中的 URL,并且 URL 与我的起始 URL 不同。我更正了此 URL,我的页面将正确打开。

4

1 回答 1

3

改变:

webSettings.setUserAgent( 0);

为了

webSettings.setUserAgentString("User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko");

说明:您有意将自己(网络视图)标识为不存在的浏览器,而 Exchange 可能不喜欢这样。通过此更改,您将自己标识为 Firefox。

答案扩展

此外,为了摆脱该身份验证请求,您应该使用将您自己的扩展WebViewClient和实现的类添加到 webview 中onReceivedHttpAuthRequest()

例如:

    webviewHTML = (WebView) findViewById( R.id.webviewHTML);

    (...)

    MPascualViewClient myNewClient = new MPascualViewClient();
    webviewHTML.setWebViewClient(myNewClient);

    (...)

    webviewHTML.loadUrl( "myaddress");
}

private class MPascualViewClient extends WebViewClient {

    @Override
    public void onReceivedHttpAuthRequest(WebView view,
    HttpAuthHandler handler, String host, String realm) {
        Log.d(this.getClass().getName(), "onReceivedHttpAuthRequest: " + host);
        String user = "a username"; //get this string from wherever you want
        String password = "a password"; //get this string from wherever you want

        handler.proceed(user, password);

    }
}
于 2014-07-14T12:06:47.843 回答