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");

説明: あなた自身 (Web ビュー) を存在しないブラウザとして識別するように意図的に設定していますが、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 に答える