LoginSignup
10
13

More than 5 years have passed since last update.

【Android】webViewでポスト通信する時にちょっとひっかかった話。【ちょっぴりiOSも】

Posted at

ポストで通信したかっただけなのに....
Androidさんがいぢめる!

posturlを使ってwebviewの表示を切り替えていると、リダイレクトの時に別ブラウザを立ち上げようとする

どうしてそういう挙動になるのかよくわからないのですが、
解決手段としてWebViewのクライアントを俺クライアントにして、
shouldOverrideUrlLoadingメソッドの部分で即returnを返してあげるようにすると
webView内で完結するようになった。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_webview);

        String url = "http://www.google.co.jp/";

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

        //クライアント上書き。
        webView.setWebViewClient(new ViewClient(webView));

        //ユーザーエージェント設定
        String userAgent = webView.getSettings().getUserAgentString();
        webView.getSettings().setUserAgentString(userAgent + "fc.app.native Android Mobile AppleWebKit Device");


        //ポストしたデータを送信
        String data = "num=1234";

        webView.postUrl(url, data.getBytes());

    }

    //WebViewClientを継承
    public class ViewClient extends WebViewClient {
        public ViewClient (WebView view){
        }
        //もし画面がWebView内でリンクがTapされてロードが始まったら割り込んでブラウザを立ち上げる
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
        }
    }

どうしてこうなるんだろう。

この不思議な現象のせいで「postUrlは外部ブラウザを立ち上げるメソッド何じゃないか」と錯覚しそうになりました。

詳しい人おしえて下さいm(_ _)m

ちなみにiosでポストする時はこんな感じ。


NSString url = @"http://www.google.co.jp/"
NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:url];

// POST指定
req.HTTPMethod = @"POST";

// BODYに登録、設定
NSString *body = [NSString stringWithFormat:@"num=1234"];

req.HTTPBody = [body dataUsingEncoding:NSUTF8StringEncoding];
// リクエスト送信
[_webView loadRequest:req];

10
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
13