2012-01-21 6 views
2

Androidアプリにクレジットカード確認サービスに接続するWebViewを追加しました。 フォームが正しく読み込まれ、間違った値を入力すると、予想どおりにエラーが発生します。ただし、正しい値の場合、サービスは別のページにリダイレクトされ、成功した確認メッセージが表示されます。代わりに、私は "オブジェクトはここに移動"メッセージを取得します。 「ここ」をクリックすると、空白になります。 WebViewClientをリロードしようとしましたが、リダイレクトが正しく処理されない可能性がありますが、それは役に立たないようです。Android Webview - リダイレクト時にオブジェクトが移動先に移動しました

WebSettings webSettings = mWebView.getSettings(); 
webSettings.setJavaScriptEnabled(true); 
mWebView.loadUrl("http://username:[email protected]"); 
mWebView.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      Log.e("WebViewLog",url); 
      view.loadUrl(url); 

      return true; 
     } 
}); 

これを解決するにはどうすればよいですか?

URLに基​​本認証が追加されている必要があります。私はURLにこの情報を渡しますmWebView.loadUrl("http://username:[email protected]")です。

LogCatは以下の通りです:

01-21 23:02:12.167: D/dalvikvm(3974): GC_CONCURRENT freed 1240K, 58% free 3061K/7175K, external 3160K/3465K, paused 1ms+2ms 
01-21 23:02:17.867: D/navcache(3974): cursorInputFieldAction : No node under current cursor 
01-21 23:02:17.867: D/navcache(3974): cursorInputFieldAction cursor=50e014, cursorFrame=50d828 
01-21 23:02:17.867: D/navcache(3974): CachedFrame::previousInputField this=50d828, start=50e014, begin=50dfb0 end=50e208 
01-21 23:02:17.867: D/navcache(3974): CachedFrame::nextInputField this=50d828, start=50e014, begin=50dfb0 end=50e208 
01-21 23:02:17.867: D/navcache(3974): cursorInputFieldAction next=50e140, prev=0, action=8 
01-21 23:02:17.999: V/webview(3974): OnSizeChanged: Enter 
01-21 23:02:17.999: E/webtextview(3974): ....Doing a super.requestRectangleOnScreen.... 
01-21 23:02:20.335: W/KeyCharacterMap(3974): No keyboard for id 0 
01-21 23:02:20.335: W/KeyCharacterMap(3974): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 
01-21 23:02:20.363: E/webtextview(3974): ....Doing a super.requestRectangleOnScreen.... 
01-21 23:02:20.878: E/webtextview(3974): ....Doing a super.requestRectangleOnScreen.... 
01-21 23:02:21.320: E/webtextview(3974): ....Doing a super.requestRectangleOnScreen.... 
01-21 23:02:22.164: E/webtextview(3974): ....Doing a super.requestRectangleOnScreen.... 
01-21 23:02:22.855: E/webtextview(3974): ....Doing a super.requestRectangleOnScreen.... 
01-21 23:02:23.183: E/webtextview(3974): ....Doing a super.requestRectangleOnScreen.... 
01-21 23:02:23.492: E/webtextview(3974): ....Doing a super.requestRectangleOnScreen....  
01-21 23:02:23.769: E/webtextview(3974): ....Doing a super.requestRectangleOnScreen.... 
01-21 23:02:24.531: E/webtextview(3974): ....Doing a super.requestRectangleOnScreen.... 
01-21 23:02:24.874: E/webtextview(3974): ....Doing a super.requestRectangleOnScreen.... 
01-21 23:02:25.187: E/webtextview(3974): ....Doing a super.requestRectangleOnScreen.... 
01-21 23:02:25.507: E/webtextview(3974): ....Doing a super.requestRectangleOnScreen.... 
01-21 23:02:27.210: E/webtextview(3974): ....Doing a super.requestRectangleOnScreen.... 
01-21 23:02:27.546: E/webtextview(3974): ....Doing a super.requestRectangleOnScreen.... 
01-21 23:02:27.812: E/webtextview(3974): ....Doing a super.requestRectangleOnScreen.... 
01-21 23:02:28.117: E/webtextview(3974): ....Doing a super.requestRectangleOnScreen.... 
01-21 23:02:37.542: D/navcache(3974): cursorInputFieldAction cursor=4bd634, cursorFrame=4f3160 
01-21 23:02:37.542: D/navcache(3974): CachedFrame::previousInputField this=4f3160, start=4bd634,  begin=4bd5d0 end=4bd828 
01-21 23:02:37.542: D/navcache(3974): CachedFrame::nextInputField this=4f3160, start=4bd634,  begin=4bd5d0 end=4bd828 
01-21 23:02:37.542: D/navcache(3974): cursorInputFieldAction next=4bd760, prev=0, action=8 
01-21 23:02:37.632: E/webtextview(3974): ....Doing a super.requestRectangleOnScreen.... 
01-21 23:02:37.648: V/webview(3974): OnSizeChanged: Enter 
01-21 23:02:38.847: D/navcache(3974): cursorInputFieldAction cursor=507fd0, cursorFrame=4f3160 
01-21 23:02:38.847: D/navcache(3974): CachedFrame::previousInputField this=4f3160, start=507fd0,  begin=507e40 end=508098 
01-21 23:02:38.847: D/navcache(3974): CachedFrame::nextInputField this=4f3160, start=507fd0,  begin=507e40 end=508098 
01-21 23:02:38.847: D/navcache(3974): cursorInputFieldAction next=508034, prev=507ea4, action=9 
01-21 23:02:39.070: D/dalvikvm(3974): GC_CONCURRENT freed 1098K, 57% free 3087K/7175K, external  3171K/3465K, paused 2ms+2ms 
01-21 23:02:39.109: V/webview(3974): OnSizeChanged: Enter 
01-21 23:02:39.164: V/webview(3974): Select Control Rect(101, 210 - 161, 241) 
01-21 23:02:41.261: V/webview(3974): OnSizeChanged: Enter 
01-21 23:02:42.656: D/navcache(3974): cursorInputFieldAction cursor=507ff4, cursorFrame=4cb1d0 
01-21 23:02:42.656: D/navcache(3974): CachedFrame::previousInputField this=4cb1d0, start=507ff4,  begin=507e00 end=508058 
01-21 23:02:42.656: D/navcache(3974): CachedFrame::nextInputField this=4cb1d0, start=507ff4,  begin=507e00 end=508058 
01-21 23:02:42.656: D/navcache(3974): cursorInputFieldAction next=0, prev=507f90, action=18 
01-21 23:02:42.847: V/webview(3974): OnSizeChanged: Enter 
01-21 23:02:42.902: V/webview(3974): Select Control Rect(165, 210 - 242, 241) 
01-21 23:02:45.308: V/webview(3974): OnSizeChanged: Enter 
01-21 23:03:12.296: D/dalvikvm(3974): GC_CONCURRENT freed 1166K, 57% free 3129K/7175K, external  3171K/3465K, paused 9ms+3ms 
01-21 23:03:12.304: D/webviewglue(3974): nativeDestroy view: 0x449480 

私はDoing a super.requestRectangleOnScreenエラー私は何かをクリックするたびに取得します。そうしないと、WebViewClientコードに入れたLog.eが表示されなくなります。

更新:私はAndroidブラウザ(Galaxyタブ上)で同じアクティビティを実行しました。まったく問題はありませんが、私はここでの違いを参考にしています。私はダイレクトリンクを使用するため、私はユーザー名とパスワードの入力を求めますが、これはテスト用のベータ版であるため、私が受け入れる証明書の例外も受け取ります。また、Androidブラウザはhttp://https://の両方を使用して動作しますが、WebViewにも最初のページが表示されません。私はURLにhttps://を使用しています。

+0

「ここに移動したオブジェクト」のログが役立ちます。より多くのコードを投稿し、更新してください。 – JoxTraex

+0

「オブジェクトを移動しました」のログはどのように取得できますか?私はAndroidプロジェクトからLogCatを投稿しましたが、関連するものは表示されません。 –

+0

これを見ていたのですか?あなたがこれを見ているところに投稿してください。 – JoxTraex

答えて

0

解決済み結局、それは認証だった。 WebViewのすべての認証方法を試した後、私はSSLに切り替えました。

証明書がWebViewClientで次のメソッドオーバーライドを使用して回避できた問題を引き起こしていました。

@Override 
public void onReceivedSslError(WebView view, 
       SslErrorHandler handler, SslError error) { 
Log.e("Error", "Received SSL error"+ error.toString()); 
handler.proceed(); 
} 

免責事項:これはベータ版であると私はテストのためにこれをやっている。これはおそらく深刻なことには良い考えではないでしょう。しかし、Android WebViewがSSLとどのように連携するかについて、いくつかの混乱があるようです。興味のある人は、次のリンクを参考にしてください。https://stackoverflow.com/a/5978391/780694http://r3gis.fr/blog/index.php?post/2009/11/17/Android-WebView-and-ssl-self-signed-certificates

0

URLストリングをUriオブジェクトに変換するUriクラスのparse()メソッド。

public void onReceivedSslError(WebView view, 
    SslErrorHandler handler, SslError error) { 
Log.e("Error", "Received SSL error"+ error.toString()); 
handler.proceed(); 
} 
+0

これは彼のケースでは動作しません。ブラウザアクティビティに強制的に入ります。 – JoxTraex

0

公共ブールshouldOverrideUrlLoadingので、(WebViewの表示、文字列のURL):新しいURLがにロードされようとしているときにAPIレベル1

ホストアプリケーションに制御を引き継ぐためにチャンスを与えます現在のWebView。 WebViewClientが提供されていない場合、WebViewはデフォルトで、Activity ManagerにURLの適切なハンドラを選択するよう求めます。 WebViewClientが提供されている場合、trueはホストアプリケーションがURLを処理することを意味し、falseは現在のWebViewがURLを処理することを意味します。

新しいURLは、このメソッドが呼び出され、ロードされようとしているときにこれはいつも私を混乱させるが、説明するの...

trueを返すと、ホストアプリケーションがURLを処理します。つまり、trueを返すと、ホストアプリケーションはURLの読み込みを上書きする必要があることを伝えます。これにより、リダイレクトやストックブラウザが呼び出される可能性があります。これは、私が知る限り、あなたが望むものではありません。

WebViewが処理したホストアプリケーションと、ホストアプリケーションがURLロードを無効にするべきでないことを示すには、falseを返す必要があります。

+0

それを試してみてください。助けてくれなかった。とにかくストックブラウザを開いていませんでした。これはリダイレクトではないと私に思います。 –

関連する問題