Posted at

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

More than 3 years have passed since last update.

ポストで通信したかっただけなのに....

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];